leecode無重複字元的最長子串
阿新 • • 發佈:2018-12-09
連結:https://www.nowcoder.com/questionTerminal/5947ddcc17cb4f09909efa7342780048 來源:牛客網 /* "滑動視窗" 比方說 abcabccc 當你右邊掃描到abca的時候你得把第一個a刪掉得到bca, 然後"視窗"繼續向右滑動,每當加到一個新char的時候,左邊檢查有無重複的char, 然後如果沒有重複的就正常新增, 有重複的話就左邊扔掉一部分(從最左到重複char這段扔掉),在這個過程中記錄最大視窗長度 */ import java.util.HashMap; public class Solution { public int lengthOfLongestSubstring(String s) { if(s == null || s.length() == 0) return 0; //新建一個map進行儲存char HashMap<Character,Integer> map = new HashMap<Character,Integer>(); int leftBound = 0; int max = 0; for(int i=0; i<s.length();i++){ char c = s.charAt(i); //視窗左邊可能為下一個char,或者不變 leftBound = Math.max(leftBound,(map.containsKey(c))? map.get(c)+1:0); max = Math.max(max, i-leftBound+1);//當前視窗長度 map.put(c,i); } return max; } }