题目
Given a string s, find the length of the longest substring without repeating characters.
Example 1:
Input: s = “abcabcbb”
Output: 3
Explanation: The answer is “abc”, with the length of 3.
Example 2:
Input: s = “bbbbb”
Output: 1
Explanation: The answer is “b”, with the length of 1.
Example 3:
Input: s = “pwwkew”
Output: 3
Explanation: The answer is “wke”, with the length of 3.
Notice that the answer must be a substring, “pwke” is a subsequence and not a substring.
Example 4:
Input: s = “”
Output: 0
Constraints:
0 <= s.length <= 5 * 104
s consists of English letters, digits, symbols and spaces.
解法:双指针
双指针i,j
用哈希表维护【i,j】区间内字符出现次数
对于下一个字符:
- 如果出现过,那么i右移
- 如果没有出现过,那么j右移
时间复杂度O(n),空间复杂度O(1)
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int ans = 0;
int f[256] = {0};
int l = 0, r = -1;
while (r + 1 < s.size()) {
if (f[s[r + 1]]) {
f[s[l++]]--;
}
else {
f[s[++r]]++;
ans = max(ans, r - l + 1);
}
}
return ans;
}
};