Можно создать дубликат:
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 код, написанный для проверки, если две заданные строки анаграммы друг друга. Я знаю, что это худшее с точки зрения сложности/эффективности, и есть намного лучшие способы сделать это.
#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 для петель кодируются это очевидно.
Что я могу сделать для улучшения этого кода и устранения этой причуды?
Где вы живете, тип возврата бедных 'main()'? –
Ваш алгоритм неверен, потому что он проверяет, присутствуют ли все символы char 's1' в' s2', но ** не ** проверяет наличие символов 's2', которые не находятся в' s1'. Вот почему '' mitt ''сообщается как анаграмма« тумана »'; '' s'' в 's2' просто игнорируется. Ваша программа также не может обнаружить различное количество повторяющихся букв, то есть '' mistmt ''vs' 'mist" ' – C2H5OH
Ваш алгоритм является одним из наихудших вариантов. Его сложность - «O (n^2 * m^2)», где n & m - длины. Проверьте дубликат для лучшего ответа. –