【leetcode-03】給定一個字符串,請你找出其中不含有重復字符的最長子串的長度


開個新坑,leetcode上面做題目。下面是題目描述:

<!-- 給定一個字符串,請你找出其中不含有重復字符的最長子串的長度。

        示例 1:

        輸入: "abcabcbb"
        輸出: 3
        解釋: 因為無重復字符的最長子串是 "abc",所以其長度為 3。
        示例 2:

        輸入: "bbbbb"
        輸出: 1
        解釋: 因為無重復字符的最長子串是 "b",所以其長度為 1。
        示例 3:

        輸入: "pwwkew"
        輸出: 3
        解釋: 因為無重復字符的最長子串是 "wke",所以其長度為 3。
        請注意,你的答案必須是 子串 的長度,"pwke" 是一個子序列,不是子串。 -->
子串呢,顧名思義,就是一連串不間斷的,子序列是可以間斷的。

下面是我注釋了解題思路的答案,這個我沒解出來,在網上搜索了一下答案,也都是些其他語言的解法,他們是用hashMap,js沒有這個吧,不太一樣,

我就關注了一下解題思路。

/**
             * @param {string} s
             * @return {number}
             */
            // 使用雙指針解決 + hash
            // 定義一個map用來充當滑塊,end往右邊走
            // 如果map里沒有s[end],就把s[end]丟到map里,同時刷新無重復字符的最大長度
            // 如果map里有s[end],那么就從左邊開始刪,直到把重復的那個值刪掉,重新進入無重復的條件中
            var lengthOfLongestSubstring = function(s) {
                const len = s.length
                let hashMap = new Map()
                let start = 0
                let end = 0
                let maxLen = 0

                while (end < len) {
                    if (!hashMap.has(s[end])) {
                        hashMap.set(s[end++], 1)
                        maxLen = Math.max(maxLen, [...hashMap.keys()].length)
                    } else {
                        hashMap.delete(s[start++])
                    }
                }
                return maxLen
            };

            lengthOfLongestSubstring('abfcdfabcdbb')

這道題就到這里,我們做這種算法題呢,不是為了去什么bat公司,只是為了培養遇到了問題的思路,開拓思路,開闊眼見,如此而已


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM