LeetCode 3 Longest Substring Without Repeating Characters

132 阅读1分钟

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;
    }
};