可能重複:
What is an easy way to tell if a list of words are anagrams of each other?
finding if two words are anagrams of each other字符串字謎C程序
下面我有書面檢查兩個給出的字符串是彼此的字謎C代碼。 我知道這在複雜性/效率方面是最差的,有很多更好的方法可以做到。
#include "stdio.h"
main()
{
char s1[]="mist";
char s2[]="mitt";
int i,j,isanag=0;
if(strlen(s1)!=strlen(s2))
printf("Not anagrams\n");
for(i=0;i<strlen(s1);i++)
{
isanag=0;
for(j=0;j<strlen(s2);j++)
{
if(s1[i]==s2[j])
{
isanag = 1;
break;
}
}
if(isanag == 0)
{
printf("Not anagrams\n");
getch();
exit(0);
}
}
printf("Yes Anagrams\n");
getch();
}
這工作得很好,並打印不字謎如果我換兩個字符串的名字如下它給出錯誤的答案
char s1[]="mitt";
char s2[]="mist";
這是正確的 我知道2 for循環編碼這種方式很明顯。
我該怎麼做才能改進這段代碼並解決這個問題?
你住哪裏的窮人'main()'的返回類型? – 2012-10-21 12:47:14
你的算法是錯誤的,因爲它只檢查's1'中是否存在's1'的所有不同的字符串,但不檢查's2'中是否存在's1'中的字符。這就是爲什麼「手套」被報道爲「霧」的一個字母組合。 s2中的's'被忽略。您的程序也未能檢測出不同數量的重複字母,即「mistmt」與「mist」' – C2H5OH
您的算法是最差的。它的複雜度是'O(n^2 * m^2)',其中n&m是長度。查看dup以獲得更好的答案。 –