003無重複字元的最長子串
阿新 • • 發佈:2020-08-05
寫在前面,參考的力扣官網的畫解演算法
滑動視窗
class Solution { public int lengthOfLongestSubstring(String s) { //定義字串長度,距離 int n=s.length(),ans=0; //用什麼裝start指標 //定義一個map資料結構儲存(k,v),期中key為字元,value值為字元位置+1 //+1表示從字元位置後一個才開始不重複 Map<Character,Integer>map=new HashMap<>(); //定義不重複字串的開始位置為start,結束位置為end for(int end=0,start=0;end<n;end++){ char alpha=s.charAt(end); //什麼時候更新start?start更新為多少? //隨著end的不斷向後遍歷,會遇到與[start,end]區間內字元相同的情況 if(map.containsKey(alpha)){ //map中取的是什麼? //此時將字元作為key值,獲取其value值,並更新start, //此時[start,end]區間內不存在重複字元 start=Math.max(map.get(alpha),start); } //不論是否更新start,都會更新其map資料結構和結果ans ans=Math.max(ans,end-start+1); //map中存的是什麼? //當前位置的元素,當前位置的後一個下標 map.put(s.charAt(end),end+1); } return ans; } }