1. 程式人生 > 資訊 >《英雄聯盟》S10淘汰賽:TES戰隊創造歷史,讓二追三,絕境翻盤

《英雄聯盟》S10淘汰賽:TES戰隊創造歷史,讓二追三,絕境翻盤

給定一個字串,請你找出其中不含有重複字元的 最長子串 的長度。

示例 1:

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

示例 2:

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

示例 3:

輸入: "pwwkew"
輸出: 3
解釋: 因為無重複字元的最長子串是 "wke",所以其長度為 3。
請注意,你的答案必須是 子串 的長度,"pwke" 是一個子序列,不是子串。

參考程式碼

class Solution {
    public int lengthOfLongestSubstring(String s) {
        /*
        int[] a = new int[200];
        char[] c = s.toCharArray();
        int res = 0;
        for(int i=0,j=0; i<c.length; i++) {
            a[c[i]] ++;
            while(a[c[i]] > 1) {
                a[c[j]]--;
                j++;
            }
            res = Math.max(res, i - j + 1);
        }
        */

        HashMap<Character, Integer> h = new HashMap<>();
        char[] c = s.toCharArray();
        int res = 0;
        for(int i=0, j=0; i<c.length; i++) {
            if(h.get(c[i]) != null && h.get(c[i]) >= j) {
                j = h.get(c[i]) + 1;
            }
            h.put(c[i], i);
            res = Math.max(res, i - j + 1);
        }

        return res;
    }
}