首页 > 其他分享 >438. 找到字符串中所有字母异位词C

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

时间:2024-02-26 16:33:50浏览次数:21  
标签:映射 int 异位 字母 个数 438 字符串

今天出成绩了,感觉徘徊在被刷的边缘,要好好努力了。

这题我想法试建立hash映射成有序的数字,只要字符串个数相同,并且映射和相同那么就是异位串。

后来这个想法是错的。以为假设已经已知一个和,和组成这个和的个数,但这个子数并不唯一,比如10=1+2+7。10=2+3+5。

这样就会误判。就算能找到唯一的映射方法,那也是一个完全大大超出这个题目难度的数学难题了。

然后学到滑动数组的做法。

用数组来记录当前串里的字母个数。

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int fhash(char c){
    return c-'a';
}

bool judge(int t[],int tp[]){
    for(int i=0;i<26;i++){
        if(t[i]!=tp[i]) return false;
    }
    return true;
}

int* findAnagrams(char * s, char * p, int* returnSize){
    int psize=0;
    int ssize=0;
    while(s[ssize]!=0) ssize++;
    while(p[psize]!=0) psize++;
    int n=0;
    int* a=(int*)malloc(sizeof(int)*ssize);
    if(psize <= ssize){
        int tp[26]={0};
        int t[26]={0};
        for(int i=0;i<psize;i++){
            t[fhash(s[i])]++;
            tp[fhash(p[i])]++;
        }
        if(judge(t,tp)){
            a[0]=0;
            n++;
        }
        for(int i=1;i<ssize-psize+1;i++){
            t[fhash(s[i-1])]--;
            t[fhash(s[i+psize-1])]++;
            if(judge(t,tp)){
                a[n++]=i;
            }
        }
    }
    *returnSize=n;
    return a;
}

结果:

标签:映射,int,异位,字母,个数,438,字符串
From: https://www.cnblogs.com/llllmz/p/18034621

相关文章

  • tomorin的字符串迷茫值
    tomorin的字符串迷茫值题目描述tomorin定义一个字符串的迷茫值为该字符串包含"mygo"连续子串的个数。例如"mygomygo"、"itsmygo"的迷茫值分别为2,1,而"bangdream"的迷茫值为0。现在tomorin有一个字符串,她准备删除一些字符,但不能删除两个连续字符。tomorin想知道在所有删除方案......
  • bitmap 位图 底层原理标记的字符串放在哪
    在Redis中,位图(bitmap)是通过字符串(string)类型来实现的,具体来说,位图是存储在Redis字符串中的二进制位数据。Redis字符串一般采用动态字符串实现,最大长度可以达到512MB。对于位图来说,每个二进制位代表一个状态或标记,可以表示非常多的状态信息,同时占用的存储空间很小。当使用......
  • Python 字符串格式化输出
    数字n:int=1000000000print(f'{n:_}')#1_000_000_000print(f'{n:,}')#1,000,000,000对齐var:str='var'#右对齐,使用_填充print(f'{var:_>20}')#_________________var#左对齐,使用#填充print(f'{var:#<20}�......
  • JavaScript语法-字符串模板
    [TOC]##JavaScript模板字符串###代码以下是index.js的部分代码:```onShareAppMessage({const{toName,mainText,fromName}=this.data;debugger;return{title:'叮,您收到一张贺卡~',path:'pages/index/index?toname=${toName}&mai......
  • isdigit函数用法、获得字符串对应的数字
    1.isdigit函数用法语法:#include<ctype.h>intisdigit(intch);使用需要添加头文件#include<ctype>。功能:如果参数是0到9之间的数字字符,函数返回非零值,否则返回零值。2.GetNUmber//获得字符串对应的数字doubleGetNumber(stringstr,intindex){doublenumb......
  • 算法-字符串
    1.反转字符串(LeetCode344)题目:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)的额外空间解决这一问题。思路:双指针,左边和右边对应位置的依次交换classSolution{......
  • C# 的布尔类型和字符串类型(模板字符串)
    //布尔类型bollboolb=false;b=1==1;//trueboolb1=1>23;//false//值类型:在代码中初始化类型的时候没有赋值但是系统会自动赋值的叫值类型//byteshortint(default0)longfloatdou......
  • KMP 字符串搜索算法
    KMP字符串搜索算法是Knuth、Morris、Pratt三位在类似的时间段内一起发明的一种字符串搜索算法,该算法的主要原理是利用待查找子串中的某些信息,在匹配失败时能够减少回退的步数算法原理假设现在有一个待搜索的字符串ABABAC,如何利用现有的字符串实现在字符不匹配时尽可能向后调......
  • 【字符串】
    首先创建字符串可以使用单引号、双引号、三单引号和三双引号,其中三引号可以多行定义字符串,Python不支持单字符类型,单字符在Python中也是作为一个字符串使用。我们定义一个变量str='python'语句,它在计算机中的执行顺序是先在内存中创建一个字符串Python,在程序栈寄存器中......
  • 综合练习字符串2
    思路2......