zoukankan      html  css  js  c++  java
  • leetcode-3. 无重复字符的最长子串


    本题是leetcode,地址:3. 无重复字符的最长子串

    题目

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

    示例 1:

    输入: "abcabcbb"
    输出: 3
    解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
    示例 2:

    输入: "bbbbb"
    输出: 1
    解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
    示例 3:

    输入: "pwwkew"
    输出: 3
    解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
    请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

    分析

    对于类似子串、子数组题目,我们几乎都可以采用滑动窗口的思路来解决;

    此题也不例外,通过移动双指针,移动过程中,记录最长的长度即可;需要注意的是,我们左指针滑动的条件,条件是window.get(c) > 1,看代码吧。

    code

        public int lengthOfLongestSubstring(String s) {
            Map<Character, Integer> window = new HashMap<>();
    
            int left = 0, right = 0;
            int maxLen = -1;
            while (right < s.length()) {
                char c = s.charAt(right);
                right++;
                window.put(c, window.getOrDefault(c, 0) + 1);
                while (window.get(c) > 1) {
                    char d = s.charAt(left);
                    left++;
                    window.put(d, window.getOrDefault(d, 0) - 1);
                }
                maxLen = Math.max(maxLen, right - left);
            }
            return maxLen;
        }
    

    你的鼓励也是我创作的动力

    打赏地址

  • 相关阅读:
    学习进度14
    计算最长英语单词链
    梦断代码阅读笔记02
    梦断代码阅读笔记01
    学习进度13
    评价输入法
    课堂测试——找水王
    第二阶段冲刺05
    实验2
    实验 1 Linux 系统的安装和常用命令
  • 原文地址:https://www.cnblogs.com/yangsanchao/p/13382144.html
Copyright © 2011-2022 走看看