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

2024-04-21 04:12

本文主要是介绍leetcode: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" 的异位词。

提示:

  • 1 <= s.length, p.length <= 3 * 104
  • s 和 p 仅包含小写字母

一开始我仍采用之前哈希使用的累加和的办法,但是出现了一些问题:

会有不同的字符串加起来和相同。

/*** Note: The returned array must be malloced, assume caller calls free().*/
int* findAnagrams(char * s, char * p, int* returnSize){int len=strlen(p);int lens=strlen(s);int tar=0;*returnSize=0;int* result=(int*)malloc(lens*sizeof(int));for(int i=0;i<len;i++){tar+=(int)p[i];}for(int j=0;j<=lens-len;j++){int tars=0;for(int i=0;i<len;i++){tars+=(int)s[j+i];}if(tars==tar){result[*returnSize]=j;(*returnSize)++;}}return result;
}

改进:

引入一个单词表来记录:

/*** Note: The returned array must be malloced, assume caller calls free().*/
int* findAnagrams(char * s, char * p, int* returnSize){int len = strlen(p);int lens = strlen(s);*returnSize = 0;int* result = (int*)malloc(lens * sizeof(int));int tar = 0;int p_count[256] = {0};int s_count[256] = {0};for(int i = 0; i < len; i++){p_count[(int)p[i]]++;tar += (int)p[i];}for(int j = 0; j <= lens - len; j++){int tars = 0;memset(s_count, 0, sizeof(s_count));for(int i = 0; i < len; i++){s_count[(int)s[j + i]]++;tars += (int)s[j + i];}if(tars == tar && memcmp(p_count, s_count, sizeof(p_count)) == 0) {result[*returnSize] = j;(*returnSize)++;}}// Reallocate memory to fit the actual size of the result arrayresult = (int*)realloc(result, (*returnSize) * sizeof(int));return result;
}

使用滑动窗口和计数排序

写的时候一直报错,后来发现,居然有lens<len的情况,直接无效没有考虑到!!!!!!!

/*** Note: The returned array must be malloced, assume caller calls free().*/
int* findAnagrams(char * s, char * p, int* returnSize){int len = strlen(p);int lens = strlen(s);*returnSize = 0;int* result = (int*)malloc(lens * sizeof(int));if (len > lens) {return result;}// Initialize character count arraysint p_count[26] = {0};int s_count[26] = {0};for(int i = 0; i < len; i++){p_count[p[i] - 'a']++;s_count[s[i] - 'a']++;}for(int j = 0; j <= lens - len; j++){if(memcmp(p_count, s_count, sizeof(p_count)) == 0) {result[*returnSize] = j;(*returnSize)++;}// Slide the windowif(j + len < lens){s_count[s[j] - 'a']--;s_count[s[j + len] - 'a']++;}}// Reallocate memory to fit the actual size of the result arrayresult = (int*)realloc(result, (*returnSize) * sizeof(int));return result;
}

这篇关于leetcode:438. 找到字符串中所有字母异位词的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/922135

相关文章

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用

详解MySQL中JSON数据类型用法及与传统JSON字符串对比

《详解MySQL中JSON数据类型用法及与传统JSON字符串对比》MySQL从5.7版本开始引入了JSON数据类型,专门用于存储JSON格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型... 目录前言基本用法jsON数据类型 vs 传统JSON字符串1. 存储方式2. 查询方式对比3. 索引

MySQL字符串常用函数详解

《MySQL字符串常用函数详解》本文给大家介绍MySQL字符串常用函数,本文结合实例代码给大家介绍的非常详细,对大家学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql字符串常用函数一、获取二、大小写转换三、拼接四、截取五、比较、反转、替换六、去空白、填充MySQL字符串常用函数一、

Python中反转字符串的常见方法小结

《Python中反转字符串的常见方法小结》在Python中,字符串对象没有内置的反转方法,然而,在实际开发中,我们经常会遇到需要反转字符串的场景,比如处理回文字符串、文本加密等,因此,掌握如何在Pyt... 目录python中反转字符串的方法技术背景实现步骤1. 使用切片2. 使用 reversed() 函

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

MySQL 获取字符串长度及注意事项

《MySQL获取字符串长度及注意事项》本文通过实例代码给大家介绍MySQL获取字符串长度及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 获取字符串长度详解 核心长度函数对比⚠️ 六大关键注意事项1. 字符编码决定字节长度2

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以