首页 > 其他分享 >[LeetCode Hot 100] LeetCode3. 无重复字符的最长子串

[LeetCode Hot 100] LeetCode3. 无重复字符的最长子串

时间:2023-12-04 15:02:12浏览次数:31  
标签:head 窗口 LeetCode3 max start Hot end 100 hashmap

题目描述

思路:滑动窗口

  • 定义需要维护的变量
// 1. 定义需要维护的变量
int max_len = 0;
Map<Character, Integer> hashmap = new HashMap<>();
  • 窗口不满足条件,窗口收缩。窗口不是固定大小所以用while
// 4. 窗口不满足条件: 窗口收缩
// 满足这个条件说明有重复元素
// 这时要用一个while去不断移动窗口左指针,从而剔除非法元素直到窗口再次合法
while (end - start + 1 > hashmap.size()) {
	char head = s.charAt(start);
	hashmap.put(head, hashmap.get(head) - 1);
	if (hashmap.get(head) == 0) {
		hashmap.remove(head);
	}
	start ++;
}

代码一:

class Solution {
    public int lengthOfLongestSubstring(String s) {
        // 1. 定义需要维护的变量
        int max_len = 0;
        Map<Character, Integer> hashmap = new HashMap<>();

        // 2. 定义窗口
        int start = 0;
        for (int end = 0; end < s.length(); end ++) {
            // 3. 更新参数
            char ch = s.charAt(end);
            hashmap.put(ch, hashmap.getOrDefault(ch, 0) + 1);
            // 窗口满足条件
			// 没有出现重复元素
            if (end - start + 1 == hashmap.size()) {
                max_len = Math.max(max_len, end - start + 1);
            }

            // 4. 窗口不满足条件: 窗口收缩
			// 满足这个条件说明有重复元素
			// 这时要用一个while去不断移动窗口左指针,从而剔除非法元素直到窗口再次合法
            while (end - start + 1 > hashmap.size()) {
                char head = s.charAt(start);
                hashmap.put(head, hashmap.get(head) - 1);
                if (hashmap.get(head) == 0) {
                    hashmap.remove(head);
                }
                start ++;
            }
        }
        return max_len;
    }
}

标签:head,窗口,LeetCode3,max,start,Hot,end,100,hashmap
From: https://www.cnblogs.com/keyongkang/p/17874916.html

相关文章

  • [LeetCode Hot 100] LeetCode438. 找到字符串中所有字母异位词
    题目描述思路:滑动窗口模板需要维护的变量://1.用于存放结果List<Integer>res=newArrayList<>();//2.定义需要维护的变量:根据题意可知是一个哈希表Map<Character,Integer>map=newHashMap<>();Map<Character,Integer>hashmap_p=newHashMap<>();for(c......
  • N100 N305 怎么选?比N5105、N6005、J4125到底提升多少,一张图片解困扰。
    N100N305怎么选?N100N305怎么选?比N5105、N6005、J4125到底提升多少,一张图片解困扰。本次畅网又推出的NAS主板我们来个参数比较图。 就看那橙色的结果,一目了然。简单的说几点:看下cpu的跑分,那N305、N100当之无愧是佼佼者。再对比价格好像也是那么一回事。从cpu的核显数来......
  • 英特尔 N100 处理器跑分出炉:达 i5-7400 水平
    英特尔今年推出了采用最新Intel7工艺的全小核处理器,其中N100为4核4线程。在最新的Geekbench6跑分平台上,N100的成绩与英特尔i5-7400桌面处理器基本一致。IntelN100Inteli5-7400如上图所示,英特尔N100处理器跑分虽然不算高,但不论单核还是多核,分数均达到了i5......
  • 初中英语优秀范文100篇-016An unforgettable Trip-一次难忘的旅行
    PDF格式公众号回复关键字:SHCZFW016记忆树1Lastyear,Iwenttomyfavoritecity,Beijing.翻译去年,我去了我最喜欢的城市,北京简化记忆城市句子结构这个句子可以分析为一个复合句,由主句和从句构成。主句是“Iwenttomyfavoritecity,Beijing”,主语是“I”......
  • [LeetCode Hot 100] LeetCode1. 两数之和
    题目描述思路:如果哈希表存在target-nums[i],则返回索引下标i和对应的key值(可以按任意顺序返回答案)如果哈希表中不存在target-nums[i],则存入nums[i]和对应的索引值方法一:哈希表classSolution{publicint[]twoSum(int[]nums,inttarget){//1.存放......
  • P1004 [NOIP2000 提高组] 方格取数 题解
    题意:思路:考虑四维$dp$:设$dp[i][j][k][l]$表示两条路径分别走到$(i,j)$和$(k,l)$时所能获取的最大和,显然会超时。考虑三维$dp$:设$dp[i][j][k]$表示两条路径走了$i$步分别走到第$j$行和第$k$行时所能获取的最大和,通过当前步数$i$以及当......
  • [LeetCode Hot 100] LeetCode15. 三数之和
    题目描述思路特判:对于数组长度为n,如果数组为null或者数组长度小于3,返回[]。对数组进行排序。遍历排序后的数组:若nums[i]>0nums[i]>0nums[i]>0:因为已经排序好,所以后面不可能有三个数加和等于000,直接返回结果。对于重复元素:跳过,避免出现重复解。令左指针L=i+1L=i+1L=i+......
  • [LeetCode Hot 100] LeetCode160. 相交链表
    题目描述思路方法一:/***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*ListNode(intx){*val=x;*next=null;*}*}*/publicclassSolution{publicListNo......
  • 初中英语优秀范文100篇-015An Unusual Experience-一次不同寻常的经历
    PDF格式公众号回复关键字:SHCZFW015记忆树1ItwasFiriday.翻译那天是星期五简化记忆星期五句子结构在句子“ItwasFriday”中,有以下成分:“It”是主语,作为一个不定代词,用来指代或代表前文提到的特定时间或事件。这里指代的是具体的某个时间或事件。“was”是......
  • Photoshop批量替换图层的方法
    平时做图片,应该有遇到这样的场景,比如P奖状、P邀请函,内容是一样的,但是图片上的名字是不一样的,要是要P100张的话,一个个手动复制改名字肯定会吐血(╯°□°)╯︵┻━┻Photoshop里有个变量的功能,就是专门解决这个问题的。先将要批量替换的图层,通常是文字图层,单独新建一层。然后在图......