美文网首页
leetcode003-最长无重复字符子串的长度

leetcode003-最长无重复字符子串的长度

作者: 陆阳226 | 来源:发表于2020-03-30 15:17 被阅读0次

问题描述

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

示例 1:

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

示例 2:

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

示例 3:

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

解答

使用map记录字符及其最新的下标(因为有重复),使用i、j遍历字符串,i表示当前无重复字符子串的开始位置,j是当前位置,如果j处字符在map中存在且该字符对应的value大于i,则说明[i,j]子串有重复了,将i的位置移到j+1,继续遍历

result记录最长的无重复子串的长度,每次遍历都取上次的result值和当前长度的最大值

class Solution {
    public int lengthOfLongestSubstring(String s) {
        // 记录字符及其下标
        Map<Character, Integer> map = new HashMap<>();
        int n = s.length();
        int result = 0;
        // 遍历字符串,将其记录在map中,每个字符只存储一个key
        // i是不重复连续子串的开始位置,j是当前位置
        for (int i = 0, j = 0; j < n; j++) {
            // 如果当前字符在map中存在,且其下标在i与j之间
            // 将i移到map中存储的下标+1
            if (map.containsKey(s.charAt(j)) && map.get(s.charAt(j)) >= i) {
                i = map.get(s.charAt(j)) + 1;
            }
            // result记录了之前的最长子串、与当前的比较取最大的
            result = Math.max(result, j - i + 1);
            // 更新该字符出现的下标
            map.put(s.charAt(j), j);
        }
        return result;
    }
}

相关文章

  • leetcode003-最长无重复字符子串的长度

    问题描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 示例 2: 示例 3: 解...

  • leetCode3最大无重复字符的子串

    最长无重复字符的子串 给定一个字符串,找出不含有重复字符的最长子串的长度。 示例: 实现思路 初始化hashSet...

  • 面试常见算法

    最长不含重复字符的子字符串: 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 示例...

  • 字符串

    1 最长无重复字符子串 2 最长上升子序列(动态规划) 3 最长公共子序列的长度(动态规划) 4 对于一个字符串,...

  • 算法1-无重复字符的最长子串

    无重复字符的最长子串 首先分析一下题目,求给定字符串的最长不重复子串,思路应该是分治不断降规模,把长度为n的字符串...

  • 阿里面试算法题四

    最长不含有重复串的字符串 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 示例 1...

  • 【leetcode-字符串】无重复字符的最长子串

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

  • 算法练习二

    无重复字符的最长子串 给定一个字符串,找出不含有重复字符的最长子串的长度。示例:给定 "abcabcbb" ,没有...

  • 无重复字符的最长子串

    无重复字符的最长子串 给定一个字符串,找出不含有重复字符的最长子串的长度。 示例: 给定"abcabcbb",没有...

  • LeetCode 每日一题 [3] 无重复字符的最长子串

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

网友评论

      本文标题:leetcode003-最长无重复字符子串的长度

      本文链接:https://www.haomeiwen.com/subject/eqsvuhtx.html