题意
在给定字符串中查找最长无重复字符的子串
思路
使用滑动窗口的思想。
维护一个子串,该子串每次向右扩增,无重复字符就一直向右走。
如果遇上了重复字符,那么找到这个字符前一个出现的位置,将这个位置以及它左边的字符全部抛弃。一直扩增到串尾,每向右移动一次则更新一次res。
时间复杂度O(n)
代码
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int res = 0;
int left = 0;
int pos[200];
for(int i = 0; i < 200; i++) pos[i] = -1;
for (int i = 0; i < s.size(); i++)
{
if (pos[s[i]] >= left && pos[s[i]] < i) left = pos[s[i]]+1;//这个位置以及它左边的字符全部抛弃
pos[s[i]] = i;
res = max(i-left+1, res);
}
return res;
}
};