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

梦想与她 提交于 2020-02-06 19:51:33
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。

题解

提交代码

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>
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!