class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_set<char> hash; //哈希表判断重复字符
int n = s.size();
int rk = -1 , ans = 0;
for(int i=0;i<n;++i){
if(i!=0){ //左指针向右移动则取出头元素
hash.erase(s[i -1]);
}
while(rk + 1 < n && !hash.count(s[rk+1])){ //count用于统计一个数出现的次数故前面加!
//右指针向右移动,哈希表中放入数组进行查重
hash.insert(s[rk + 1]);
++rk; //右指针向右移动
}
ans = max(ans,rk-i+1); //找出最长的子串长度rk-i表示在哈希表中的数组相减所以要加一才能表示最长子串
}
return ans;
}
};
本来打算kmp求解,结果发现自己不行就离谱
浙公网安备 33010602011771号