leetcode:第3题

作者: 皮克斯不爱吃糖 | 来源:发表于2022-10-03 20:50 被阅读0次

    题目

    给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

    例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 由英文字母、数字、符号和空格组成
    

    代码

    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++) {
                i = max(i, m[s[j]]);
                m[s[j]] = j + 1;
                ans = max(ans, j - i + 1);
            }
            return ans;
        }
    };
    

    思路

    以第一个字符为基准(i),第二个字符起(j),依次与第一个字符对比,若相等,则输出前面的字符个数(i)。
    在解题时,思考了几种方法:一是以上的动态滑动窗口;二是使用指针直接对比;三是采用二分法对比。相较之下,滑动窗口更简单明了。

    相关文章

      网友评论

        本文标题:leetcode:第3题

        本文链接:https://www.haomeiwen.com/subject/zsieartx.html