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;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】