Ошибка алгоритма анаграммы

Возможный дубликат:
Алгоритм анаграммы в Java

    public static boolean test(String a, String b) {
    a=a.toLowerCase();
    b=b.toLowerCase();
    boolean result = true ;
    boolean tmp1=false;

    if(a.length()==b.length()){
    for(int i=0;i<a.length();i++){
        tmp1=false;
        for(int k=0;k<b.length();k++){
            if(a.charAt(i)==b.charAt(k)){



                return true;
                }

        }
        if(tmp1==false){
            result=false;
            break;
        }
        if(i==a.length()-1)
            result=true;
        }
    }

    else {
        result=false;
        }



    return result;

}

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

Код работает правильно, когда ввод

  • слово одно дса
  • второе слово asd
  • Вывод анаграммы (правильный результат)

Код не для ввода

  • первое слово асса
  • второе слово асаа
  • результат - анаграмма (НЕПРАВИЛЬНЫЙ результат)

В чем я виновата?

3 ответа

Ваш алгоритм решает, что слово является анаграммой слишком рано - фактически, как только оно может сопоставить первую букву первого слова с любой буквой второго слова:

if(a.charAt(i)==b.charAt(k)){
    return true;
}

Самый простой алгоритм обнаружения анаграммы в Java выглядит следующим образом:

Вы позволяете i беги от 0 до a.length() а также k от 0 до b.length(), Таким образом, обе переменные цикла начинаются с начала соответствующей строки.

Кроме того, во внутреннем цикле вы сразу же возвращаетесь true для всей функции, если в любой момент любой символ в b соответствует персонажу в a,

Прежде всего, если вы собираетесь использовать такие заявления, как return true или же return false, используйте их последовательно (избавиться от boolean result).

Проблема этого алгоритма в том, что как только он обнаружит пару идентичных символов, он вернет true. Чтобы это исправить, рассмотрите возможность сортировки двух строк и проверки равенства всех символов (подсказка: Arrays.sort а также String.toCharArray).

Другие вопросы по тегам