【LeetCode練習】3. 無重複字元的最長子串
題目來源link
演演算法思想:滑動視窗;
分析來源link
滑動視窗,保證每個視窗裡字母都是唯一的
使用 int[] m 來記錄一個字母,如果後面出現重複時,i 應該調整到的新位置,所以每次更新的時候都會儲存 j + 1 ,即字母后面的位置
j 表示子串的最後一個字母,計運算元串長度為 j - i + 1
PS: i:左邊界,重複字元選後者更新;j右邊界,向後遍歷,計算len
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;
}
}