1. 程式人生 > >leecode無重複字元的最長子串

leecode無重複字元的最長子串

連結: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;
         
    }
}