leetcode 242.有效的字母异位词
题目描述
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
解题思路
排序的方法
字母异位词,意思是长度相同,所含字母的数量相同,只是位置不同,采用c++中的sort函数排序,比较两个字符串是否相等
class Solution {
public:
bool isAnagram(string s, string t) {
sort(s.begin(), s.end());
sort(t.begin(), t.end());
if(s == t){
return true;
}
return false;
}
};
哈希表的方法,统计每个字符出现的次数,根据次数判断是否为异位词
class Solution {
public:
bool isAnagram(string s, string t) {
if(s.size() != t.size()){
return false;
}
int len = s.size();
unordered_map<char, int> sMap;
unordered_map<char, int> tMap;
for(int i=0; i<len; i++){
if(sMap.find(s[i]) == sMap.end()){
sMap[s[i]] = 1;
}
else{
sMap[s[i]] += 1;
}
if(tMap.find(t[i]) == tMap.end()){
tMap[t[i]] = 1;
}
else{
tMap[t[i]] += 1;
}
}
for(auto sElem : sMap){
if(sElem.second != tMap[sElem.first]){
return false;
}
}
return true;
}
};
进阶的写法
class Solution {
public:
bool isAnagram(string s, string t) {
int sArr[26] = {0}, tArr[26] = {0};
for(int i=0; s[i]!='\0'; i++){
sArr[s[i]-'a'] += 1;
}
for(int i = 0; t[i]!='\0'; i++){
tArr[t[i]-'a'] += 1;
}
for(int i=0; i<26; i++){
if(sArr[i] != tArr[i]){
return false;
}
}
return true;
}
};
代码进一步优化
class Solution {
public:
bool isAnagram(string s, string t) {
int Arr[26] = {0};
int i=0;
while (s[i] && t[i]){
Arr[s[i] - 'a'] += 1;
Arr[t[i] - 'a'] -= 1;
i++;
}
if(s[i] || t[i]){
return false;
}
for(int i=0; i<26; i++){
if(Arr[i]){
return false;
}
}
return true;
}
};
欢迎大家关注我的个人公众号,同样的也是和该博客账号一样,专注分享技术问题,我们一起学习进步

本文详细介绍了如何通过排序、哈希表和数组计数等方法,解决LeetCode上的有效字母异位词问题,提供了多种C++实现方案,并对代码进行了优化。
200

被折叠的 条评论
为什么被折叠?



