03 无重复字符的最长字串
原题链接:无重复字符的最长字串
个人解法
思路:
双指针,因为题目要求是字串而非子序列且不能重复,那么可以利用双指针,同时利用一个数组st
来记录字符出现的次数。
记指针i
为向后走的指针,指针j
落后于i
,指针i
将字符加入到st
中,若此时字符对应的个数大于1,那么表示从指针i
到j
组成的字串有重复字符,故移动j
,同时删除j
所指字符,直到i
指的字符个数不大于1。
在做上述过程中同时记录最大的字串长度。
时间复杂度: O ( n ) O(n) O(n)
代码:
class Solution {
public:
unordered_map<char, int> st;
int lengthOfLongestSubstring(string s) {
int res = 0;
for(int i = 0,j = 0;i < s.size();i ++) {
++ st[s[i]];
while(st[s[i]] > 1) {
st[s[j ++]] --;
}
res = max(res, i - j + 1);
}
return res;
}
};