leetcode地址
給定一個字符串 s ,請你找出其中不含有重復字符的 最長子串 的長度。
示例 1:輸入: s = "abcabcbb"
輸出: 3
解釋: 因為無重復字符的最長子串是 "abc",所以其長度為 3。
示例 2:輸入: s = "bbbbb"
輸出: 1
解釋: 因為無重復字符的最長子串是 "b",所以其長度為 1。
示例 3:輸入: s = "pwwkew"
輸出: 3
解釋: 因為無重復字符的最長子串是 "wke",所以其長度為 3。請注意,你的答案必須是 子串 的長度,"pwke" 是一個子序列,不是子串。
提示:
0 <= s.length <= 5 * 10^4
s 由英文字母、數字、符號和空格組成
thought:滑動窗口法
使用map,當出現了同樣的值,則移動最開始計數的下一個位置:
abca--> 該位置到底第二個a----->left指向第一次出現a的下標+1,即b的位置---》開始計數if(map.containsKey(s.charAt(i))){left = Math.max(left,map.get(s.charAt(i))+1);}比較大小時,取一個值作為max來比較大小,最后取最大
class Solution {public int lengthOfLongestSubstring(String s) {int left=0;if (s.length()<=0) return 0;HashMap<Character,Integer> map = new HashMap<Character,Integer>();int max = 0;for(int i =left;i<s.length();i++){if(map.containsKey(s.charAt(i))){left = Math.max(left,map.get(s.charAt(i))+1);}map.put(s.charAt(i),i);max = Math.max(max,i-left+1);}return max;}
}