【LeetCode練習】[中等]3. 無重復字符的最長子串
3. 無重復字符的最長子串
題目來源link
演算法思想:滑動視窗;
分析來源link
-
滑動視窗,保證每個視窗里字母都是唯一的

-
使用 int[] m 來記錄一個字母,如果后面出現重復時,i 應該調整到的新位置,所以每次更新的時候都會保存 j + 1 ,即字母后面的位置
-
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;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/110504.html
標籤:其他
上一篇:C語言:函式指標及函式指標陣列
