С каждым отдельным символом String s мы можем создать String t.
Если мы проанализируем слово 'Anagram', то обнаружим, что это слово состоит из 'aaa'(3) 'n'(1) 'g'(1) 'r'(1) 'm '(1) → 7 символов
Первое решение
Если мы используем Hashmap(key, value) , мы можем сохранить букву для ключа и номер ключа для значения, и мы можем проверить, равны ли эти две строки или нет.
public class Solution_HashMap { public boolean isAnagram(String s, String t) { Map<Character, Integer> s1 = new HashMap<>(); Map<Character, Integer> t1 = new HashMap<>(); if(s.length() != t.length()) return false; for(int i = 0; i < s.length(); i++) { s1.put(s.charAt(i),s1.getOrDefault(s.charAt(i),0)+1); t1.put(t.charAt(i),t1.getOrDefault(t.charAt(i),0)+1); } return s1.equals(t1); } } //Runtime: 19 ms, faster than 18.80% of Java online submissions for Valid Anagram. //Memory Usage: 42.9 MB, less than 38.54% of Java online submissions for Valid Anagram. //from : https://leetcode.com/problems/valid-anagram/solutions/233567/java-solution-using-hashmap/
Но если мы создадим два таких хэш-карты, временная сложность и сложность памяти будут слишком большими. Как мы видим, этот метод быстрее только 18,80% заявок на leetcode. Итак, как мы можем решить эту проблему?
Окончательное решение
Вместо этого мы используем Hashmap. Мы можем просто отсортировать эти две строки вот так и проверить, верны эти строки или нет!
public class Solution_Sort { public boolean isAnagram(String s, String t) { if(s.length() != t.length()) return false; char[] sArr = s.toCharArray(); char[] tArr = t.toCharArray(); Arrays.sort(sArr); Arrays.sort(tArr); for(int i = 0; i<sArr.length; i++) { if(sArr[i] != tArr[i]) return false; } return true; } } //Time: O(nlogn) //Space: O(1) //Runtime: 3 ms, faster than 82.74% of Java online submissions for Valid Anagram. //Memory Usage: 42.6 MB, less than 53.14% of Java online submissions for Valid Anagram. //from : https://leetcode.com/problems/valid-anagram/solutions/471783/java-hashmap-sort-explanations
Таким образом, этот метод становится быстрее, чем 82,74% заявок на leetcode.
Ресурсы:
https://leetcode.com/problems/valid-anagram/solutions/471783/java-hashmap-sort-explanations/