给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
说明:
你可以假设字符串只包含小写字母。
进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
字母异位词就是字母的类型和数目都相同的词,顺序可以随便。这个题简单的思路就是用哈希表来存每一个字母的出现次数,然后对照另一个字符串的结果。还有一种就是既然只有26个小写字母,可以使用一个数组代替,只要对应位置的数字符合就可以了。C++程序是使用数组方法,python3程序使用了哈希表。
C++源代码:
class Solution {
public:
bool isAnagram(string s, string t) {
if (s.length()!=t.length()) return false;
vector<int> m(26, 0);
for (int i=0;i<s.length();i++)
m[s[i]-'a']++;
for (int i=0;i<t.length();i++)
{
m[t[i]-'a']--;
if (m[t[i]-'a']<0)
return false;
}
return true;
}
};
python3源代码:
class Solution:
def isAnagram(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
if len(s)!=len(t):
return False
m = {}
for i in range(len(s)):
if s[i] in m.keys():
m[s[i]] += 1
else:
m[s[i]] = 1
for i in range(len(t)):
if t[i] in m.keys():
m[t[i]] -= 1
if m[t[i]] < 0:
return False
else:
return False
return True