题目大意:
给定一个字符串\(s\),请你找出其中不含有重复字符的最长子串的长度。
题解:
用尺取法解题:
- 每次将左指针右移一位表示开始枚举下一个字符作为起始位置;
- 不断右移右指针直至出现重复字符,当前子串长度与答案进行比较;
- 重复以上操作。
过程中用哈希集合记录出现过的字符。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_set<char> hashTable;
int n = s.length();
int r = -1, ans = 0;
for (int i = 0; i < n; ++i) {
if (i) {
hashTable.erase(s[i - 1]);
}
while (r + 1 < n && !hashTable.count(s[r + 1])) {
hashTable.insert(s[r + 1]);
r++;
}
ans = max(ans, r - i + 1);
}
return ans;
}
};