1. 程式人生 > 其它 >Leetcode Longest Substring Without Repeating Characters & 無重複字元的最長子串 解題報告

Leetcode Longest Substring Without Repeating Characters & 無重複字元的最長子串 解題報告

  1. 問題描述
    • 給定一個字串 s ,請你找出其中不含有重複字元的 最長子串 的長度。
  2. 測試用例
    示例1
    • 輸入: s = "abcabcbb"
    • 輸出: 3
    • 解釋: 因為無重複字元的最長子串是 "abc",所以其長度為 3。
    示例2
    • 輸入: s = "bbbbb"
    • 輸出: 1
    • 解釋: 因為無重複字元的最長子串是 "b",所以其長度為 1。
    示例 3:
    • 輸入: s = "pwwkew"
    • 輸出: 3
    • 解釋: 因為無重複字元的最長子串是 "wke",所以其長度為 3。
    • 請注意,你的答案必須是 子串 的長度,"pwke" 是一個子序列,不是子串。
    示例 4:
    • 輸入: s = ""
    • 輸出: 0
    示例5
    • 輸入:s=“ ”
    • 輸出:1
    示例6
    • 輸入:s=“ ”
    • 輸出:1
  3. 補充說明
    • 0 <= s.length <= 5 * 104

    • s 由英文字母、數字、符號和空格組成

  4. 解題報告

    主要思路是使用滑動視窗,分別使用start、end 指標,前提是保證兩個指標單調遞增,剩餘邏輯就是處理指標移動的邏輯。

    java程式碼如下:

    public int lengthOfLongestSubstring(String s) {
            int start = 0;
            int end = 0;
            int res = 0;
            //記錄出現的位置
            int[] array = new int[128];
            while (end < s.length()) {
                int index = s.charAt(end);
                //移動start指標
                start = Math.max(start, array[index]);
                //移動end指標
                end += 1;
                //計算最大視窗
                res = Math.max(res, end - start);
                //記錄出現字元位置,重置start指標準備
                array[index] = end;
            }
            return res;
    }