найти, если два слова являются анаграммами друг друга - PullRequest
23 голосов
/ 21 ноября 2010

Я ищу метод, чтобы определить, являются ли две строки анаграммами друг друга.

Ex: string1 - abcde
string2 - abced
Ans = true
Ex: string1 - abcde
string2 - abcfed
Ans = false

Решение, которое я придумал, заключается в сортировке обеих строк и сравнении каждого символа из обеих строкдо конца любой строки. Это будет O (logn). Я ищу другой эффективный метод, который не изменяет сравниваемые 2 строки

Ответы [ 22 ]

0 голосов
/ 23 ноября 2013

Если обе строки имеют одинаковую длину, продолжайте, если нет, то строки не являются анаграммами.

Итерация каждой строки при суммировании ординалов каждого символа.Если суммы равны, то строки представляют собой анаграммы.

Пример:

    public Boolean AreAnagrams(String inOne, String inTwo) {

        bool result = false;

        if(inOne.Length == inTwo.Length) {

            int sumOne = 0;
            int sumTwo = 0;

            for(int i = 0; i < inOne.Length; i++) {

                sumOne += (int)inOne[i];
                sumTwo += (int)inTwo[i];
            }

            result = sumOne == sumTwo;
        }

        return result;
    }
0 голосов
/ 01 декабря 2012
/* Program to find the strings are anagram or not*/
/* Author Senthilkumar M*/

Eg. 
    Anagram:
    str1 = stackoverflow
    str2 = overflowstack

    Not anagram:`enter code here`
    str1 = stackforflow
    str2 = stacknotflow

int is_anagram(char *str1, char *str2)
{
        int l1 = strlen(str1);
        int l2 = strlen(str2);
        int s1 = 0, s2 = 0;
        int i = 0;

        /* if both the string are not equal it is not anagram*/
        if(l1 != l2) {
                return 0;
        }
        /* sum up the character in the strings 
           if the total sum of the two strings is not equal
           it is not anagram */
        for( i = 0; i < l1; i++) {
                s1 += str1[i];
                s2 += str2[i];
        }
        if(s1 != s2) {
                return 0;
        }
        return 1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...