leetcode有效字母异位同词(242)

题目描述

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

示例 1: 输入: s = “anagram”, t = “nagaram”
输出: true
示例 2:输入: s = “rat”, t = “car”
输出: false
说明:你可以假设字符串只包含小写字母。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-anagram
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

最笨的办法是对s和t中的字母按字母顺序排序,但该方法比较费时间,此处介绍采用map的方式
1.因为共有26个字母,所以采用有26个元素的数组,字母与数组下标存在一一对应关系,对应关系又多种,比如字母a可以放在下标为‘a’%26的元素中,也可也放在‘a’ - 97的元素中
2.题中有两个字符串,其中一个字符串负责对其对应的数组元素做++操作,一个–操作,这样最后数组中的元素应该全是0

需要考虑的特殊情况:
1.输入参数的合法性
2.两个字符串长度不一样
3.字母有大写字母和小写字母,leetcode中有其他的处理方式,有些没有考虑大写字母

代码注意事项:
字母和数组元素的对应关系尽量采用减法关系,相对%方式节省资源

代码实现

bool isAnagram(char * s, char * t){

if((s == NULL) || (t == NULL))
{
    return false;
}
   
char smap[26] = {0};
memset(smap,0,26);

while((*s) && (*t))  //防止s和t长度不一样
{
    if((*s > 64) && (*s < 91))            
        smap[*s - 65]++;
    else if((*s > 96) && (*s < 123))  
        smap[(*s) - 97]++;
    s++;
    
    if((*t > 64) && (*t < 91))            
        smap[*t - 65 ]--;
    else if((*t > 96) && (*t < 123))  
        smap[(*t) - 97]--;
    t++;
}
   
if(*s != *t)
{
    return false;       
}
   
for(int i = 0; i < 26; i++)
{
    if(0 != smap[i])
    {
        return false;
    }
}
return true;      
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值