leedcode无重复字符的最长字串

无重复字符的最长字串

示例 1:

输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:

输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:

输入: s = “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。

提示:

0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成

分析:
滑动窗口+vector

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        vector<int> m(128, 0);
        int ans = 0;//记录最长字串的长度
        int i = 0;//滑动窗口的左边界
        for (int j = 0; j < s.size(); j++) {//j为滑动窗口的右边界
            if(m[s[j]]!=0)//遍历的字符出现了重复
            i = max(i, m[s[j]]);//比较出现重复的字符是否在左边界右边,i移至重复的点
            m[s[j]] = j + 1;//记录该字符已经出现过了
            ans = max(ans, j - i + 1);//更新最长字串
        }
        return ans;

    }
};

你可能感兴趣的:(算法,c++)