剑指 Offer 48.最长不含重复字符的子字符串

剑指 Offer 48.最长不含重复字符的子字符串

在这里插入图片描述
暴力法需要O(n^2),我们可以借助哈希表查找,只需要O(1)的时间,整体时间复杂度就降到了O(n)

class Solution {
    public int lengthOfLongestSubstring(String s) {
        HashMap<Character,Integer> map = new HashMap<>();
        int i = -1, res = 0;
        for(int j = 0; j < s.length(); j++) {
          if(map.containsKey(s.charAt(j)))
            i = Math.max(i, map.get(s.charAt(j))); //
            map.put(s.charAt(j),j); //更新
            res = Math.max(res, j - i);
        }
        return res;
    }
}

更新左指针的时候,为什么不直接用i=dic[s[j]]
之所以要max,是当出现abba这种情况时的需要,至于为什么,自己遍历一下就知道了
在这里插入图片描述

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页