mybloger

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2、求最长不重复子串

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度。
输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
class Solution {
    // 双指针算法
    // 1、定义两个指针,一个在前,一个在后,这个区间维护最长不重复距离
    // 2、通过map判断是否有重复,因为前指针无需回退,所以时间复杂度为o(n)
    public int lengthOfLongestSubstring(String s) {
        HashMap<Character,Integer> map = new HashMap();
        int ans = 0;
        for (int i = 0,j = 0;i < s.length();i ++) {
            map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0) + 1);
            while (map.get(s.charAt(i)) > 1 ) {               
                map.put(s.charAt(j),map.get(s.charAt(j)) - 1);
                j ++;
            }
            ans = Math.max(ans,i - j + 1);
        }
        return ans;
    }
}
posted on 2024-09-07 21:11  万能包哥  阅读(6)  评论(0编辑  收藏  举报