一、题目说明
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = “anagram”, t = “nagaram”
输出: true
示例 2:
输入: s = “rat”, t = “car”
输出: false
说明:
你可以假设字符串只包含小写字母。
二、代码实现(Python)
class Solution(object):
def isAnagram(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
return sorted(s) == sorted(t)
三、代码实现(C++)
(1)C++代码方法一
class Solution {
public:
bool isAnagram(string s, string t) {
{
int i, x[26] = { 0 }, y[26] = { 0 };
for (i = 0; s[i] != '\0'; i++) x[s[i] - 'a']++; //建立 s 的字符表 x
for (i = 0; t[i] != '\0'; i++) y[t[i] - 'a']++; //建立 t 的字符表 y
for (i = 0; i < 26; i++) //比较两字符表是否相同
if (x[i] != y[i]) return false;
return true; //种类、个数均相同
}
}
};
(2)C++代码方法二
class Solution {
public:
bool isAnagram(string s, string t) {
sort(s.begin(),s.end());
sort(t.begin(),t.end());
if(s==t)
return true;
else
return false;
}
};
(3)C++代码方法三
class Solution {
public:
bool isAnagram(string s, string t) {
unordered_map<char,int> map;
if (s.size() != t.size())
return false;
for(int i=0;i<s.size();i++){
++map[s[i]];
--map[t[i]];
}
for(unordered_map<char,int>::iterator it=map.begin();it!=map.end();it++){
if(it->second!=0)
return false;
}
return true;
}
};
(4)C++代码方法四
class Solution {
public:
bool isAnagram(string s, string t) {
int num[26]={0};
if(s.length()!=t.length())
return false;
for(int i=0;s[i]!='\0';i++){
num[s[i]-'a']++;
num[t[i]-'a']--;
}
for(int i=0;i<26;i++)
if(num[i]!=0)
return false;
return true;
}
};
这种方法效率最高。
四、执行结果
参考文献:
[1] https://leetcode-cn.com/problems/valid-anagram/
[2] https://leetcode-cn.com/problems/valid-anagram/comments/