в программе Valid Anagram не проходит все тестовые случаи - PullRequest
1 голос
/ 26 октября 2019

Учитывая две строки s и t, напишите функцию, чтобы определить, является ли t анаграммой s.

Пример 1:

Ввод: s = "anagram", t = "nagaram«Вывод: true Пример 2:

Вход: s =« rat », t =« car »Вывод: false

пример 3« aad »« cab »Вывод true Ожидаемый false

Мой тестовый пример 3 дает вывод true, почему?

class Solution {
    public boolean isAnagram(String s, String t) {
        if (s.isEmpty() && t.isEmpty()) {
            return true;
        }
        if (s.length() != t.length()) {
            return false;
        }
        char[] a = s.toCharArray();
        char[] b = t.toCharArray();

        Arrays.sort(a);
        Arrays.sort(b);
        for (int i = 0; i <= a.length; i++) {
            for (int j = 0; j <= b.length; j++) {
                if (a[i] == b[j]) {
                    return true;    
                }
            }
        }
        return false;
    }
}

Ответы [ 2 ]

1 голос
/ 26 октября 2019

Используя вложенный цикл for, вы будете перебирать каждую возможную пару (i, j) с i и j in idex в a и b соответственно. Кроме того, вы используете i++ и j++ дважды, и, таким образом, вы пропустите четные индексы. Вы не можете вернуть true с момента a[i++] == b[j++] совпадений. Чтобы узнать, является ли что-то анаграммой, вам нужно пройтись по всем элементам. Вы можете вернуть false с момента a[i] != b[i] однако. Наконец, граница должна быть i < a.length, а не i <= a.length.

Таким образом, вам нужен один цикл for, в котором вы делаете одно приращение и сравниваете a[i] с b[i]:

public boolean isAnagram(String s, String t) {
    if(s.length() != t.length()){
        return false;
    }
    char[] a = s.toCharArray();
    char[] b = t.toCharArray();

    Arrays.sort(a);
    Arrays.sort(b);

    for(int i = 0; i < a.length; i++) {
        if(<b>a[i] != b[i]</b>) {
            return <b>false</b>;
        }
    }
    return <b>true</b>;
}
0 голосов
/ 26 октября 2019

Вы просто сравниваете первую букву cab и rat , что составляет a , и возвращаете True, на самом деле вам нужно проверить все буквы.

Следовательно, сделайте условие отрицательным и поменяйте местами возвраты.

 if(a[i++] !=b[j++]){
   return false;
  } 
return true; 

Приведенный выше код вернет false, если символы не равны, поэтому последняя строка достигается только тогда, когда все символы равны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...