判断字符串是否是异位词


s="anagram", t="nagaram"
这就属于异位词,长度一样,包含的字母都一样,每个字符出现的频率也一样,只是顺序不同而已
s="rat",t="car"
这种就不属于异位词,因为s中的'r'在t中没有
思路:
1 首先看字符串长度是否一样,不一样则为false
2 看每个字符出现的频率是否一样,可以用到hash表。申请一个26长度的int数组。首先遍历字符串s然后,将每个字符串
换算成索引后存入数组,并同时进行计数
3 遍历字符串t,然后依次对字符对对应的数组值减一,如果出现小于0的情况则说明不匹配
代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int isAnagram(char *s, char *t)
{
    int freq[26];
    int i, j,len_s, len_t,value;
    len_s = strlen(s);
    len_t = strlen(t);
    value = 0;
    memset(freq, 0, 26*4);
    if (len_s != len_t)
        return -1;
    for (i = 0; i < len_s; i++)
    {
        freq[*(s + i) - 'a']+=1;
    }
    for (j = 0; j < len_t; j++)
    {
        freq[*(t + j) - 'a']-=1;
        value = freq[*(t + j) - 'a'];
        if (value < 0)
            return -1;
    }
    return 1;
 
}

  

posted @   red_leaf_412  阅读(1895)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
历史上的今天:
2017-09-18 一起来学linux:ACL
点击右上角即可分享
微信分享提示