重複の可能性:
単語のリストが互いにアナグラムであるかどうかを簡単に見分ける方法は?
2 つの単語が互いにアナグラムであるかどうかを調べる
与えられた 2 つの文字列が互いのアナグラムであるかどうかを確認するために、以下の 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();
}
これは正常に動作し、正しい Not Anagrams を出力します。以下のように 2 つの文字列の名前を入れ替えると、間違った答えが返されます
char s1[]="mitt";
char s2[]="mist";
2 つの for ループがコード化されている方法を知っていますが、これは明らかです。
このコードを改善し、この癖を解決するにはどうすればよいですか?