有效的字母异位词(力扣简单哈希表题)

题目:

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

注意:*s**t* 中每个字符出现的次数都相同,则称 *s**t* 互为字母异位词。

思路:

想法一:

  • 还是使用map容器来计数,和上几个题解法一致
class Solution {
public:
    bool isAnagram(string s, string t) {
        unordered_map<char,int> m;
        for(char ch : s){
            ++m[ch];
        }
        if(s.size() != t.size()){
            return false;
        }else{
            for(int i = 0;i < t.size();++i){
            if(m[t[i]] == 0){
                return false;
            }
            else if(m[t[i]] > 0){
                --m[t[i]];
            }
        }
        return true;
        }
        

    }
};
  • 但是时间复杂度稍高,于是看了一下官方题解
class Solution {
public:
    bool isAnagram(string s, string t) {
        if (s.length() != t.length()) {
            return false;
        }
        vector<int> table(26, 0);
        for (auto& ch: s) {
            table[ch - 'a']++;
        }
        for (auto& ch: t) {
            table[ch - 'a']--;
            if (table[ch - 'a'] < 0) {
                return false;
            }
        }
        return true;
    }
};

作者:力扣官方题解
链接:https://leetcode.cn/problems/valid-anagram/solutions/493231/you-xiao-de-zi-mu-yi-wei-ci-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 官方题解使用的数组,可能是map在构建过程中时间复杂度会偏高,但是本人更喜欢用map,如非必要,则不用数组表示。
posted @   ku然  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示