/*判断两个字符串是否是变位词。变位词:指组成两个词的字符相同,只是位置不同*/
//方法1、对两个字符串排序,如果是变位词则排序后相等,时间复杂度NlogN
//方法1、对两个字符串排序,如果是变位词则排序后相等,时间复杂度NlogN
//方法2、开辟一个256大小的整型数组来统计第一个词的每个字符出现的次数,扫描第一个词,相应字符出现的次数加一;扫描第二个词,相应字符出现的次数减一;如果最后数组256个全部为0,则为变位词。
C++实现
bool is_anagram(const string &s1,const string &s2)
{
int count[256];
memset(count,0,sizeof(count));
int len1 = s1.length(), len2 = s2.length();
if(len1==0 || len2==0 || len1!=len2)
return false;
else
{
for(int i=0;i<len1;i++)
{
++count[s1[i]];
--count[s2[i]];
}
for(int j=0;j<256;j++)
{
if(count[j]!=0)
return false;
}
return true;
}
}
Python实现
def is_anagram(s1,s2):
length1 = len(s1)
length2 = len(s2)
count = [0]*256
if length1==0 or length2==0 or length1!=length2:
return False
else:
for i in range(0,length1):
++count[ord(s1[i])]
--count[ord(s2[i])]
for j in range(0,256):
if count[j]!=0:
return False
return True