首页 > 其他分享 >[LeetCode Hot 100] LeetCode438. 找到字符串中所有字母异位词

[LeetCode Hot 100] LeetCode438. 找到字符串中所有字母异位词

时间:2023-12-04 14:58:47浏览次数:27  
标签:map ch end LeetCode438 startChar start Hot 100 hashmap

题目描述

思路:滑动窗口模板

  • 需要维护的变量
// 1. 用于存放结果
List<Integer> res = new ArrayList<>();
// 2. 定义需要维护的变量:根据题意可知是一个哈希表
Map<Character, Integer> map = new HashMap<>();

Map<Character, Integer> hashmap_p = new HashMap<>();
for (char ch : p.toCharArray()) {
	hashmap_p.put(ch, hashmap_p.getOrDefault(ch, 0) + 1);
}
  • 窗口长度为固定,所以用if
 if (end >= p.length() - 1) {
// 或者 if (end - start + 1 == p.length()) {} 
	char startChar = s.charAt(start);
	map.put(startChar, map.get(startChar) - 1);
	if (map.get(startChar) == 0) {
		map.remove(startChar);
	}
	start ++;
}

类似LeetCode643. 子数组最大平均数I

方法一:滑动窗口

class Solution {
    public List<Integer> findAnagrams(String s, String p) {
        // 1. 用于存放结果
        List<Integer> res = new ArrayList<>();
        // 2. 定义需要维护的变量:根据题意可知是一个哈希表
        Map<Character, Integer> map = new HashMap<>();

        Map<Character, Integer> hashmap_p = new HashMap<>();
        for (char ch : p.toCharArray()) {
            hashmap_p.put(ch, hashmap_p.getOrDefault(ch, 0) + 1);
        }

        // 3. 定义窗口区间范围
        int start = 0;
        for (int end = 0; end < s.length(); end ++) {
            // 4. 更新需要维护的变量
            char currentChar = s.charAt(end);
            map.put(currentChar, map.getOrDefault(currentChar, 0) + 1);
            if (map.equals(hashmap_p)) {
                res.add(start);
            }

            // 5. 由题意知:窗口固定用if
            if (end >= p.length() - 1) {
                char startChar = s.charAt(start);
                map.put(startChar, map.get(startChar) - 1);
                if (map.get(startChar) == 0) {
                    map.remove(startChar);
                }
                start ++;
            }
        }
        return res;
    }
}

方法二:跟方法一在最后一个if中处理不同

class Solution {
    public List<Integer> findAnagrams(String s, String p) {
        // 1. 用于存放结果
        List<Integer> res = new ArrayList<>();
        // 2. 定义需要维护的变量:根据题意可知是一个哈希表
        Map<Character, Integer> map = new HashMap<>();

        Map<Character, Integer> hashmap_p = new HashMap<>();
        for (char ch : p.toCharArray()) {
            hashmap_p.put(ch, hashmap_p.getOrDefault(ch, 0) + 1);
        }

        // 3. 定义窗口区间范围
        int start = 0;
        for (int end = 0; end < s.length(); end ++) {
            // 4. 更新需要维护的变量
            char currentChar = s.charAt(end);
            map.put(currentChar, map.getOrDefault(currentChar, 0) + 1);
            if (map.equals(hashmap_p)) {
                res.add(start);
            }

            // 5. 由题意知:窗口固定用if
            if (end - start + 1 == p.length()) {
                char startChar = s.charAt(start);
                map.put(startChar, map.get(startChar) - 1);
                if (map.get(startChar) == 0) {
                    map.remove(startChar);
                }
                start ++;
            }
        }
        return res;
    }
}

标签:map,ch,end,LeetCode438,startChar,start,Hot,100,hashmap
From: https://www.cnblogs.com/keyongkang/p/17874895.html

相关文章

  • 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里有个变量的功能,就是专门解决这个问题的。先将要批量替换的图层,通常是文字图层,单独新建一层。然后在图......
  • [LeetCode Hot] LeetCode283. 移动零
    题目描述方法一:时间复杂度O(n2)classSolution{publicvoidmoveZeroes(int[]nums){for(inti=0;i<nums.length;i++){//指针i为0的时候停止if(nums[i]==0){//遍历[i+1,nums.length-1],如果遇......