1:问题描述
Given two strings s and t , write a function to determine if t is an anagram of s.
2:最无聊的解决方案
```java // 用排序实现 // 时间复杂度 O(nlogn) // 空间复杂度 O(1) public static boolean isAnagram(String s, String t) { char[] sChar = s.toCharArray(); char[] tChar = t.toCharArray(); Arrays.sort(sChar); Arrays.sort(tChar); return String.valueOf(sChar).equals(String.valueOf(tChar)); }
<a name="EcxZT"></a>## 3:原生解题结果```java// 哈希表// 时间复杂度 O(n)// 空间复杂度 O(1)public static boolean isAnagram(String s, String t) {Map<Character, Integer> map = new HashMap<>();for (char ch : s.toCharArray()) {map.put(ch, map.getOrDefault(ch, 0) + 1);}for (char ch : t.toCharArray()) {Integer count = map.get(ch);if (count == null) {return false;} else if (count > 1) {map.put(ch, count - 1);} else {map.remove(ch);}}return map.isEmpty();}
// 计数器public static boolean isAnagram(String s, String t) {if (s.length() != t.length()) {return false;}int[] counter = new int[26];for (int i = 0; i < s.length(); i++) {counter[s.charAt(i) - 'a']++;counter[t.charAt(i) - 'a']--;}for (int count : counter) {if (count != 0) {return false;}}return true;}
4:解题思路
因为比较是不是异位词,就比较字母出现的次数就好了,所以哈希表或计数器一样的思路实现
5:Go语言实现
func isAnagram(s string, t string) bool {if len(s) != len(t) {return false}strMap := make(map[string]int)for i := 0; i < len(s); i++ {strMap[string(s[i])]++}for j := 0; j < len(t); j++ {strMap[string(t[j])]--}for _, v := range strMap {if v != 0 {return false}}return true}
