1. 程式人生 > 遊戲 >光榮《刀劍亂舞無雙》更新 內番風裝束第三彈登場

光榮《刀劍亂舞無雙》更新 內番風裝束第三彈登場

劍指 Offer 48. 最長不含重複字元的子字串

題目

連結

https://leetcode-cn.com/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof/

問題描述

請從字串中找出一個最長的不包含重複字元的子字串,計算該最長子字串的長度。

示例

輸入: "abcabcbb"
輸出: 3
解釋: 因為無重複字元的最長子串是 "abc",所以其長度為 3。

提示

s.length <= 40000

思路

雙指標加雜湊表,用於存放是否重複。

注意區間的邊界。

複雜度分析

時間複雜度 O(n)
空間複雜度 O(1)

程式碼

Java

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