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

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

题解

提交代码

public static int lengthOfLongestSubstring(String s) {
        int n = s.length(), ans = 0;
        Map<Character, Integer> map = new HashMap<>();

        for(int j = 0, i = 0; j < n; j++){
            if (map.containsKey(s.charAt(j))) {
                i = Math.max(i, map.get(s.charAt(j)));
            }

                ans = Math.max( j - i + 1 , ans);
                map.put(s.charAt(j), j + 1);
        }
        return ans;
    }

提交代码的思路:以一个滑动窗口来判断最长子串,用HashMap判断是否子串有重复字符,若有,则改变左窗口。以O(n)的时间复杂度和O(n)的空间复杂度得出结果。

  • 其中HashMap为<Character,Integer>
原文地址:https://www.cnblogs.com/chenshaowei/p/12269976.html