介绍:给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例2:
输入: s = "rat", t = "car"
输出: false
说明: 你可以假设字符串只包含小写字母。
进阶:如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
源代码
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include <sstream>
#include<map>
using namespace std;
bool isAnagram(string s, string t)
{
int k = 0;
map<char, int> mapset_s,mapset_t;
for (int i = 0; i < s.length(); i++)
{
++mapset_s[s[i]];
}
for (int j = 0; j < t.length(); j++)
{
++mapset_t[t[j]];
}
map<char, int>::iterator it_s = mapset_s.begin();
map<char, int>::iterator it_t = mapset_t.begin();
if (mapset_s.size() == mapset_t.size())
{
for (it_s, it_t; it_s != mapset_s.end() && it_t != mapset_t.end(); it_s++, it_t++)
{
if ((it_s->first == it_t->first)&&(it_s->second == it_t->second))
{
k = k + 1;
}
}
}
if (k == mapset_s.size())
{
return true;
}
else
{
return false;
}
}
int main()
{
string s = "anagram", t = "nagaram";
cout << isAnagram(s, t) << endl;
system("pause");
return 0;
}
除了C++源代码,这里还有一份python源代码,实现起来特别简单。
from collections import Counter
class Solution:
def isAnagram(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
c1 = Counter(s)
c2 = Counter(t)
if (c1 == c2):
return True
return False