LeetCode热题100(八)—— 438.找到字符串中所有字母异位词

news/2025/1/30 13:09:53/

LeetCode热题100(八)—— 438.找到字符串中所有字母异位词

  • 题目描述
  • 代码实现
  • 思路解析

  • 你好,我是杨十一,一名热爱健身的程序员
  • 在Coding的征程中,不断探索与成长
  • LeetCode热题100——刷题记录(不定期更新)
    此系列文章用于记录我在学习 LeetCode热题100 过程中的总结和收获
    愿与诸君共同探讨,在代码世界里携手共进,攻克难题,提升自我

题目描述

给定两个字符串 s 和 p,找到 s 中所有 p 的异位词的子串。
返回这些子串的起始索引。不考虑答案输出的顺序。
字母异位词是通过重新排列不同单词或短语的字母而形成的单词或短语,并使用所有原字母一次。
示例 1:输入: s = "cbaebabacd", p = "abc"输出: [0,6]解释:起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。
示例 2:输入: s = "abab", p = "ab"输出: [0,1,2]解释:起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。起始索引等于 1 的子串是 "ba", 它是 "ab" 的异位词。起始索引等于 2 的子串是 "ab", 它是 "ab" 的异位词。
提示:1 <= s.length, p.length <= 3 * 104s 和 p 仅包含小写字母

代码实现

class Solution {public List<Integer> findAnagrams(String s, String p) {List<Integer> result = new ArrayList<>();int sLen = s.length();int pLen = p.length();if (sLen < pLen)return result;int[] pArray = new int[26];int[] sArray = new int[26];for (int i = 0; i < pLen; i++) {pArray[p.charAt(i) - 'a']++;sArray[s.charAt(i) - 'a']++;}if (Arrays.equals(pArray, sArray)) {result.add(0);}for (int i = 0; i < sLen - pLen; i++) {sArray[s.charAt(i) - 'a']--;sArray[s.charAt(i + pLen) - 'a']++;if (Arrays.equals(pArray, sArray)) {result.add(i + 1);}}return result;}}

思路解析

  1. 输入:两个字符串 s ps中查找p的异位词
  2. 输出:异位词起始位置索引集合
  3. 思路:双指针 & 异位词特性
    • 双指针:左右指针定位子串起始和结束位置
    • 异位词特性:
      • 长度一致
      • 所使用的字符一致
      • 所使用的字符顺序可以不一致
      • 举例 abc acb bca bac cab cba 互为异位词
    • coding思路
      • 快速失败,若 s.length < p.length 不满足异位词第一条特性 s 的子串不能与 p 构成异位词
      • 滑动窗口:左右指针 [L,R] 间距固定位置 p.length 逐次向后遍历字符串 s
      • 异位词判定:
        • 使用数组int[26]记录子串的各个字符数量(题目描述只包含26个小写字母)
          • 遍历过程中,左右指针同步向右移动,每移动一位,数组中左指针字符数量减一,右指针字符数量加一
          • 如果字符不固定,考虑使用 Map<Character, Integer> 记录出现的字符和出现的次数
        • 判断子串字符与待判定字符串 p 的字符数量是否一致
          • 判断子串字符数量数组与 p 字符数量数组是否一致
          • 判断数组是否一致,工具类 Arrays.equals()
            在这里插入图片描述

  • 你好,我是杨十一,一名热爱健身的程序员
  • 在Coding的征程中,不断探索与成长
  • LeetCode热题100——刷题记录(不定期更新)
    此系列文章用于记录我在学习 LeetCode热题100 过程中的总结和收获
    愿与诸君共同探讨,在代码世界里携手共进,攻克难题,提升自我

http://www.ppmy.cn/news/1567539.html

相关文章

IPhone14 Pro Max设备详情

目录 产品宣传图内部图——后设备详细信息 产品宣传图 内部图——后 设备详细信息 信息收集于HubWeb.cn

flutter入门系列教程<2>:Http请求库-dio的使用

文章目录 11.3 Http请求库-dio11.3.1 引入dio11.3.2 通过dio发起请求11.3.3 实例 实战&#xff1a;注意点1.声明返回参数model2.请求接口3.渲染组件 11.3 Http请求库-dio 本处示例来自&#xff1a;https://book.flutterchina.club/chapter11/dio.html 通过上一节介绍&#xff0…

C++ —— vector 容器

C —— vector 容器 引言vector容器的使用vector容器的嵌套 引言 string只封装了字符数组&#xff0c;而vector容器支持任意类型的数组。 使用vector容器需要包含头文件&#xff1a;#include <vector> vector类模板的声明&#xff1a; template<class T, class Allo…

一图展示汽车和航空电子领域的安全和互操作性解决方案的概览

这张图展示了汽车和航空电子领域的安全和互操作性解决方案的概览&#xff0c;特别强调了系统之系统&#xff08;Systems-of-Systems&#xff09;的安全性、互操作性以及多核处理器的集成。图中包含了几个关键概念和组织&#xff0c;它们在推动这些领域的发展中扮演着重要角色。…

springboot 启动 banner自定义

参考&#xff1a; https://juejin.cn/post/7259720224659849274 在启动类 main 方法中设置application.setBannerMode(Banner.Mode.OFF)&#xff0c;可以关闭 Banner 图。 自定义banner网站&#xff1a; patorjk.comhttp://www.network-science.de/ascii/https://www.degraev…

【Dify实践案例】使用Dify构建文章标题生成器

创建空白应用&#xff0c;选择聊天助手&#xff0c;自定义应用名称。 编写提示词并设置变量参数 你是文章标题的撰写大师&#xff0c;请你根据用户提供的话题&#xff1a;{{topic}}&#xff0c;和关键词&#xff1a;{{keyword}}&#xff0c;生成有吸引力的标题&#xff0c;不…

Arcgis国产化替代:Bigemap Pro正式发布

在数字化时代&#xff0c;数据如同新时代的石油&#xff0c;蕴含着巨大的价值。从商业决策到科研探索&#xff0c;从城市规划到环境监测&#xff0c;海量数据的高效处理、精准分析与直观可视化&#xff0c;已成为各行业突破发展瓶颈、实现转型升级的关键所在。历经十年精心打磨…

waitpid使用

waitpid 是 Unix/Linux 系统中用于等待子进程状态变化的系统调用。它允许父进程挂起执行&#xff0c;直到指定的子进程终止或者发生了其他指定的状态变化。 waitpid 的语法 pid_t waitpid(pid_t pid, int *status, int options); pid: 要等待的子进程的进程 ID&#xff0c;特殊…