1.双指针
设指针i,指向子串的起始位置,子串j指向子串的结束位置,变量max记录子串的最大长度
首先遍历字符串,对于字符串中的每个字符,将其加入到hashmap中,若加入当前字符s[j]时,hashmap[s[j]]>1,则表示此时的子串中存在重复字符,则需要使i指针后移,且hashmap[s[i]]--,直到hashmap[s[j]]的值为1
然后判断j-i+1即当前子串的长度是否大于max,若是,则更新max
代码如下:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
//子串要求连续
int max=0;
map<char,int> hashmap; //当前子串中各个字母出现的次数
int n = s.size();
for(int i=0,j=0;j<n;j++){//当前判断是否重复的串为s[i..j]
hashmap[s[j]]++;
while(hashmap[s[j]]>1){
hashmap[s[i++]]--; //i指针右移
}
if(j-i+1>max)
max = j-i+1;
}
return max;
}
};