頻偏兩次估計一次糾正Matlab程式碼
阿新 • • 發佈:2020-10-18
給定一個字串,請你找出其中不含有重複字元的 最長子串 的長度。
示例 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; } }