题意
在给定字符串中查找最长无重复字符的子串
思路
使用滑动窗口的思想。
维护一个子串,该子串每次向右扩增,无重复字符就一直向右走。
如果遇上了重复字符,那么找到这个字符前一个出现的位置,将这个位置以及它左边的字符全部抛弃。一直扩增到串尾,每向右移动一次则更新一次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;
}
};
本文介绍了一种使用滑动窗口思想求解最长无重复字符子串的问题,通过维护一个动态子串并实时更新结果,实现O(n)的时间复杂度。
705

被折叠的 条评论
为什么被折叠?



