LeetCode 3 Longest Substring Without Repeating Characters
思路
维护2个变量,i表示子串的终点,j表示子串的起点。在起点j至终点i的范围内,不允许出现重复字母。用 map<char, int> 记录每个字符最后出现的位置。每次循环,通过自增变量i,向子串添加新字符。检查新字符是否与子串内已有字符重复,如果重复,则根据 map<char, int> 修改变量j,如果不重复,则更新 map<char, int>
代码
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int rs = 0;
map<char, int> mp;
for (int i = 0, j = 0; i < s.size(); ++i) {
if (mp.count(s[i])) {
j = max(j, mp[s[i]] + 1);
}
mp[s[i]] = i;
rs = max(rs, i - j + 1);
}
return rs;
}
};