每日一题-Day10-无重复最长字串

Posted 2月2日

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一题-Day10-无重复最长字串相关的知识,希望对你有一定的参考价值。

题目

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

解题思路

​ 滑动窗口思想

  1. 设置一个队列,从数组头部开始扩大,如果出现重复字符,我们就删除最左端 元素,计算此时长度,

  2. 继续扩大队列,当再次遇到重复字符时,计算长度

  3. 判断该字符是否为队头元素,如果不是,则将队列中该字符的左端元素包括自身删除

  4. 遍历整个数组

class Solution {
    public int lengthOfLongestSubstring(String s) {
        HashMap<Character, Integer> map = new HashMap<Character, Integer>();
        int left=0;
        int max=0;
        for(int i=0;i<s.length();i++){
            if(map.containsKey(s.charAt(i))){
                left = Math.max(map.get(s.charAt(i))+1,left);
            }
            map.put(s.charAt(i),i);
            max=Math.max(i-left+1,max);
        }
        return max;
    }
}

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/

以上是关于每日一题-Day10-无重复最长字串的主要内容,如果未能解决你的问题,请参考以下文章

每日一题最长无重复子数组最长不含重复字符的子字符串

每日一题最长无重复子数组最长不含重复字符的子字符串

每日一题 错选择 及 编程题 周总结

每日一题-Day12-最长回文字串

阿铭每日一题 day 10 20180120

无重复字符的最长字串问题