438. 找到字符串中所有字母异位词

给定两个字符串 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” 的异位词。


C代码1:异位词-哈希数组,此方法更加简单粗暴!更适用于考试!

// 滑动窗口的长度固定,
// 滑动窗口的字符串为异位词
// 异位词,直接锁定哈希数组、长度固定的滑动窗口右移,判断两个哈希数组相等不
// (方法不对,直接嗝屁,开始写之前一定要,确保方法是正确的!)
int* findAnagrams(char * s, char * p, int* returnSize){int lenS = strlen(s);int lenP = strlen(p);int arr[26] = {0};for (int i = 0; i < lenP; ++i) {arr[p[i] - 'a']++;}int ans[lenS];memset(ans, 0, sizeof(ans));int k = 0;for (int i = 0; i <= lenS - lenP; ++i) {  // 0123 01 i<2int arr1[26] = {0};for(int j = i; j < i + lenP; ++j) {arr1[s[j] - 'a']++;}if (equals(arr, arr1)) {ans[k++] = i;}}int* ans1 = (int*)malloc(sizeof(int) * k);for (int i = 0; i < k; ++i) {ans1[i] = ans[i];}*returnSize = k;return ans1;
}

C代码2:异位词-哈希数组:多了一些细节处理,优化内存

int* findAnagrams(char * s, char * p, int* returnSize){int lenS = strlen(s);int lenP = strlen(p); if (lenS < lenP) {// int* arr = (int*)malloc(0);static int arr[0];*returnSize = 0;return arr;}int arr[26] = {0};   // 哈希数组到单一字母一定是26int arr1[26] = {0};int ans[lenS];memset(ans, 0, sizeof(ans));int k = 0;for (int i = 0; i < lenP; ++i) {  // 这里就要考虑是否越界了,测试样例肯定有!arr[p[i] - 'a']++;arr1[s[i] - 'a']++;}if (equals(arr, arr1)) {ans[k++] = 0;}for (int i = 0; i < lenS - lenP; ++i) {arr1[s[i] - 'a']--;arr1[s[i + lenP] - 'a']++;if (equals(arr, arr1)) {ans[k++] = i + 1;}}int* ans1 = (int*)malloc(sizeof(int) * k);for (int i = 0; i < k; ++i) {ans1[i] = ans[i];}*returnSize = k;return ans1;
}

438. 找到字符串中所有字母异位词【异位词-哈希数组】相关推荐

  1. 【LeetCode】【HOT】438. 找到字符串中所有字母异位词(滑动窗口)

    [LeetCode][HOT]438. 找到字符串中所有字母异位词 文章目录 [LeetCode][HOT]438. 找到字符串中所有字母异位词 package hot;import java.uti ...

  2. Java实现 LeetCode 438 找到字符串中所有字母异位词

    438. 找到字符串中所有字母异位词 给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引. 字符串只包含小写英文字母,并且字符串 s 和 p ...

  3. 438. 找到字符串中所有字母异位词【我亦无他唯手熟尔】

    438. 找到字符串中所有字母异位词 438. 找到字符串中所有字母异位词 题解 官方 438. 找到字符串中所有字母异位词 难度 中等 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 ...

  4. 【解题报告】Leecode 438. 找到字符串中所有字母异位词——Leecode每日一题系列

    今天是坚持每日一题打卡的第二十七天 题目链接:https://leetcode-cn.com/problems/find-all-anagrams-in-a-string/ 题解汇总:https:// ...

  5. LeetCode 438. 找到字符串中所有字母异位词(滑动窗口)

    1. 题目 给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引. 字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100 ...

  6. LeetCode 438. 找到字符串中所有字母异位词(双指针+滑动窗口)

    题目描述 给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引. 字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100. ...

  7. LeetCode:438. 找到字符串中所有字母异位词(简单易懂)

    一.题目描述: 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引.不考虑答案输出的顺序. 异位词 指由相同字母重排列形成的字符串(包括相同的字符串). 示例 ...

  8. leetcode刷题(91)——438. 找到字符串中所有字母异位词

    给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引. 字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100. 说明: ...

  9. leetcode 438. Find All Anagrams in a String | 438. 找到字符串中所有字母异位词(Java)

    题目 https://leetcode.com/problems/find-all-anagrams-in-a-string/ 题解 方法1:尝试构造一种"与顺序无关的哈希" 思考 ...

最新文章

  1. php java session共享_php 函数session_id()思考。实现同服务器下session共享
  2. 斐波那契数 c 语言实现
  3. DPM2012保护sharepoint场
  4. Go语言fmt.Printf使用指南(占位符总结)
  5. 串口服务器工作方式及常见异常故障问题排除方法介绍
  6. 手写实现java中的trim_JS中字符串trim()使用示例
  7. mysql错误日志为aborting_MySQL 错误日志(Error Log)
  8. 人工智能(12)---中国智能语音业务与应用发展白皮书
  9. 如何在Hadoop2上远程调试MapReduce
  10. Atitit 调用百度语音识别 目录 1. 建立一个音频app项目,获得appid kersec 1 2. 直接使用JAR包步骤如下: 1 2.1. public class baiduAudio
  11. 图书借阅系统软件测试实验报告,C 大作业--图书管理系统-实验报告.doc
  12. 地球轨道计算方法,开普勒三大定律的证明,补充-解析几何之椭圆
  13. java 修改pdf_使用Java编辑PDF文本
  14. winform小程序-随机抽奖软件
  15. Weiss Ratings公布加密货币评级结果
  16. 以TFP401A为核心的DVI接口应用系统
  17. 一区希尔盖服务器找不到,魔兽世界怀旧服:服务器第一成就达成!分享一下心得...
  18. Redis持久化——AOF机制详解
  19. R数据分析:变量间的非线性关系,多项式,样条回归和可加模型
  20. 基于Pytorch的3D卷积

热门文章

  1. EXCEL 2010如何分屏/多窗口显示多文件
  2. 记工作的第一月--光说不练,假把式
  3. 华三STP、RSTP、MSTP的详解
  4. 我的科幻杂谈1:不读史,无以言
  5. mmdetection3d kitti (持续更新)
  6. 图像修复实例解析(二)
  7. 5G NGC — NRF 网络注册功能
  8. Java毕设_装修公司业务流程管理系统的设计与实现
  9. Windows7下按装使用vagrant踩坑总结及Vagrant常见镜像简单配置
  10. ubuntu mysql快捷键_ubuntu快捷键设置大全