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;
    }
    

猜你喜欢

转载自blog.csdn.net/SpringBoots/article/details/119820195