開個新坑,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公司,只是為了培養遇到了問題的思路,開拓思路,開闊眼見,如此而已
