3. Longest Substring Without Repeating Characters
题目
Given a string, find the length of the longest substring without repeating characters.
Example 1:
Input: "abcabcbb"
Output: 3
Explanation: The answer is "abc", with the length of 3.
Example 2:
Input: "bbbbb"
Output: 1
Explanation: The answer is "b", with the length of 1.
Example 3:
Input: "pwwkew"
Output: 3
Explanation: The answer is "wke", with the length of 3.
Note that the answer must be a substring, "pwke" is a subsequence and not a substring.
题目意思
在一个字符串重寻找没有重复字母的最长子串。
解题思路
这一题用的思想是"滑动窗口"。
滑动窗口的右边界不断的右移,只要没有重复的字符,就持续向右扩大窗口边界。一旦出现了重复字符,就需要缩小左边界,直到重复的字符移出了左边界,然后继续移动滑动窗口的右边界。以此类推,每次移动需要计算当前长度,并判断是否需要更新最大长度,最终最大的值就是题目中的所求。
/**
* @param {String} s
* @return {number}
*/
export function lengthOfLongestSubstring(s: string): number {
const len:number = s.length;
let indexMap = new Map();
let [result, left, right]:number[] = [0, 0, 0];
while (left < len) {
// 若该值为true,说明此字符在X位置重复,需要左侧向前移动
if (indexMap.get(s[right])) {
indexMap.set(s[left], false);
left++;
} else {
indexMap.set(s[right], true);
right++;
}
if (result < (right - left)) {
result = right - left;
}
if ((left + result) >= len || right >= len) {
break
}
}
return result
};