利用set中自带的count来判断是否字串中含有重复元素
首先从头到尾开始遍历数组,每当遇到一个字母利用count判断是否在字串中含有字母,若没有此字母,将字母入set
若字串中发现与此字母重复,查询当前字串长度是否大于sum(历史最长字串)若大于则更新字串长度。若小于则不更新,此时
应从字串头开始删除,直至重复字母处,删除重复字母后并将当前字母入队set。继续由主串 i 处往后遍历,看是否与当前字串重
复。
首先小技巧:由于 left 是从0开始的,不删除时left值不会变化,当出set后left所至之处即为当前字串的串头
class Solution {
public:
int lengthOfLongestSubstring(string s) {
set<char>Set;
int left = 0, count = 0, sum = 0;
for (int i = 0; i < s.size(); i++) {
if (Set.count(s[i])) {//发现重复
if (count > sum)sum = count;
while (Set.count(s[i])) Set.erase(s[left++]);//删除//删除
Set.insert(s[i]);
count = Set.size();//删除后的个数
}
else {//未发现
count++;
Set.insert(s[i]);
}
}
return count > sum ? count : sum;
}
};