【LeetCode練習】3. 無重複字元的最長子串

2020-09-22 14:00:21

【LeetCode練習】3. 無重複字元的最長子串

3. 無重複字元的最長子串

題目來源link
演演算法思想:滑動視窗;

分析來源link

  1. 滑動視窗,保證每個視窗裡字母都是唯一的
    在這裡插入圖片描述

  2. 使用 int[] m 來記錄一個字母,如果後面出現重複時,i 應該調整到的新位置,所以每次更新的時候都會儲存 j + 1 ,即字母后面的位置

  3. j 表示子串的最後一個字母,計運算元串長度為 j - i + 1

PS: i:左邊界,重複字元選後者更新;j右邊界,向後遍歷,計算len

java程式碼

class Solution {
    public int lengthOfLongestSubstring(String s) {
		char[] sChar = s.toCharArray();//String轉化成char陣列
        int[] m = new int[128];//用來標記字元是否出現過
        int len = 0;//統計長度
        for(int i = 0, j = 0; j < s.length(); j++){
            i = Math.max(m[sChar[j]], i);//判斷是否有處重複字元出現,m[sChar[j]]重複字元,更新為最新出現位置;
            len = Math.max(len, j - i + 1);//計算長度
            m[sChar[j]] = j + 1;//記錄   已出現的字元位置
        }
        return len;
    }
}