每日一题-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-Git


下一篇:python学习day10笔记