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

charAt返回指定索引处的字符。

转为字符数组toCharArray()

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

class Solution {
    public int lengthOfLongestSubstring(String s) {
        HashMap<Character, Integer> map = new HashMap<>();
        int tmp = 0, res = 0;
        for(int j = 0; j < s.length(); j++){
            int i = map.getOrDefault(s.charAt(j), -1);
            map.put(s.charAt(j), j);
            //tmp用来存放以字符s[j]为结尾的 “最长不重复子字符串” 的长度
            //哈希表中没有重复的情况下,j++,而i始终为-1
            //则问号前的式子永远为真,j往后移,最长不重复字串长度也+1
            //哈希表中有重复的情况下,更新为j-i,i是哈希表中找到的重复元素的下标
            tmp = tmp < j - i ? tmp + 1 : j - i;
            res = Math.max(tmp, res);
        }
        return res;
    }
}

 

posted @ 2021-04-14 21:14  星予  阅读(31)  评论(0编辑  收藏  举报