LeetCode 題解 3無重複字元的最長子串
給定一個字串s
,請你找出其中不含有重複字元的最長子串的長度
這道題就是理清一個邏輯 (我也是看答案明白的會了就行) 遍歷以及遍歷操作是不同的 有了這個思想就容易理解了
//殼子
public int XXX(String s){
// 構建 非重複容器 雖然用不到 但是有一點 hash的查詢是最快的 或者說是 比陣列的查詢快的多
Set<Character> set = new HashSet<>();
// 構建 所需變數
int max = 0 , n = s.length() , rk = -1;
// 遍歷目標
for(int i = 0; i< n ; i ++){
// i 不等零說明 已經找到當前位置 不重複最長子串
if( i! = 0 ){
//移除前一個 也就是 從字串首位開始移除至 下一個不重複最長子串首位
//可以說是遍歷思想的一種 永遠排除不需要的字元
set.remove(s.chaAt( i -1 ))
}
// 進行遍歷操作
// rk 是一個標示位 看個人怎麼理解 用 -1 比較方便 +1 比較 n +1比較下一位
while (rk+1<n && !set.contains( rk+1)){
// 當滿足不越界 並且 容器中未重複條件後
set.add(s.charAt( ++ rk));
}
//當遍歷操作結束後 一定是出現重複元素或者達到最值 然後進行最大值 計算
max = max>(rk - i +1 )? max:(rk -i +1);
}
// 迴圈結束後 返回最值
return max;
}