1. 程式人生 > 其它 >LeetCode 題解 3無重複字元的最長子串

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;

 }