欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

3. 无重复字符的最长子串

程序员文章站 2022-07-14 14:39:28
...

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。

解决思路:滑动窗口
用到的数据结构:HashMap 判断是否存在
key为字符 value为字符位置+1 (表示从后面一位不重复)

class Solution {
    public int lengthOfLongestSubstring(String s) {
        int n = s.length();
        int ans = 0;

        Map<Character, Integer> map = new HashMap<>();

        for(int end = 0,start = 0;end < n;end ++){
            char a = s.charAt(end);
            if(map.containsKey(a)){
                start = Math.max(map.get(a),start); //这里比较大小是避免start左移
            }
            ans = Math.max(ans, end - start + 1);
            map.put(s.charAt(end), end + 1);
        }
        return ans;
    }
}

start = Math.max(map.get(a),start);
例子:…a…b…a…a…b… 举例应该是这样的例子吧,第二个a会把start更新到第一个a之后,第三个a会把start更新到第二个a之后,此时start=Idx(a2]+1,到第二个b会选择max[map(b),start]=start

相关标签: LeetCode Hot100