思想:
题意是 在原串中找到最长的一组每个字符最多出现一次的子串。
方法是使用双指针在原串中进行扫描,时间复杂度O(n)。
i表示满足条件的串的起始位置;
j表示满足条件的串的结束位置;
在一次遍历过程中记录长度最长的串的长度到maxLen中;
j每次往前移动一单位,遇到一个新的字符,判断当前集合中是否已经存在该字符
(1)若存在,移动i指针,直到排除之前出现过的这个元素;
(2)若不存在,标记该元素,然后看是否可以更新maxLen;
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int i,j;
int len = 0, maxLen = 0;
bool sign[256];
memset(sign,0,sizeof(sign));
for(i = 0, j = 0; j < s.length(); j++) {
while(sign[s[j]] == 1) {
sign[s[i]]=0;
++i;
}
sign[s[j]] = 1;
maxLen = max(maxLen, j-i+1);
}
return maxLen;
}
};