leetcode——第242题——数组当做哈希表

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

示例 1:
输入: s = “anagram”, t = “nagaram”
输出: true

class Solution {
public:
    bool isAnagram(string s, string t) {
        // result 数组记录的不是每个字母。
        // 两个字符串都遍历一遍,第一次遍历计+1,第二次遍历计数-1
        // 这样如果相等,则result就是全0,否则就说明有不同的

        // 为什么会有这样的思路呢?因为数组本身就可以相当于哈希表来用
        // 字母一共也就26个,每一个单独记录,也不算太多,比较清晰的思路
        // 也就是哈希值总共就26个,跨度也就26个
        // 赞!!!
        int result[26] = {0};
        // 把26个元素全都初始化为0
        int sSize=0;
        int tSize=0;
        while((sSize<s.size())||(tSize<t.size()))
        {
            // 第一个循环,出现某个字符时,则在这个位置上++
            if(sSize<s.size())
            {
                result[s[sSize]-'a']++;
                sSize++;
            }
            // 第二个循环,出现某个字符时,则在对应位置上--
            if(tSize<t.size())
            {
                result[t[tSize]-'a']--;
                tSize++;
            }
        }
        for(int a:result)
        {
            if(a!=0)
                return false;           
        }
        // 刚刚迟疑了一下,说明这里的理解还是不到位呀
        // 你想想,当出现非0,直接就return了,自然也就执行不到这里了
        return true;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值