242.有效的字母异位词&383.赎金信

有效的字母异位词


给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

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

示例2:
输入: s = "anagram", t = "nagaram"
输出: true

解题思路


暴力排序

直接排完序再比较两个字符串是否相同

class Solution {
public:
    bool isAnagram(string s, string t) {
        if((int)s.size() != (int)t.size()) {
            return false;
        }
        sort(s.begin(), s.end());
        sort(t.begin(), t.end());
        return s == t;
    }
};
哈希表
class Solution {
public:
    bool isAnagram(string s, string t) {
        if(s.length()!=t.length())return false;//如果两个字符串长度不等,直接返回false

        int length=s.length();
        int hashmap[26]={0};//建立一个对应26个字母的哈希表,初始化为0
        for(int i=0;i<length;i++)
        {
            hashmap[s[i]-'a']++;//s负责加
            hashmap[t[i]-'a']--;//t负责减
        }
        for(int i=0;i<26;i++)
        {
            if(hashmap[i]!=0)return false;
        }
        return true;//若最后哈希表所有的值为0则匹配成功
        
    }
};

赎金信


给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。如果可以,返回 true ;否则返回 false 。其中magazine 中的每个字符只能在 ransomNote 中使用一次。

示例1:
输入:ransomNote = "a", magazine = "b"
输出:false

示例2:
输入:ransomNote = "aa", magazine = "ab"
输出:false

示例3:
输入:ransomNote = "aa", magazine = "aab"
输出:true

解题思路


//沿用上题思路加减
class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        int hashmap[26]={0};
        int length=magazine.size();
        int length_ran=ransomNote.size();

        for(int i=0;i<length;i++)
        {
            if(i<length_ran)hashmap[ransomNote[i]-'a']--;
            hashmap[magazine[i]-'a']++;
        }

        for(int i=0;i<26;i++) if(hashmap[i]<0)return false;
        return true;
    }
};
posted @   vhuivwet  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示