LeetCode242. 有效的字母异位词-Java&Go-哈希表
- 算法
- 1.只有小写字母时,使用26大小的数组做简易的哈希表即可
- 2.当两个字符串不一样长度时,一定不是有效的字母异位词
- 3.确保两个字符串一样长度时,只需要遍历两个字符串(在遍历第二个字符串时做检查即可),无需再单独遍历数组进行检查
public boolean isAnagram(String s, String t) { if (s.length() != t.length()) { return false; } int[] alphabet = new int[26]; for (char c : s.toCharArray()) { alphabet[c-'a']++; } for (char c : t.toCharArray()) { if (alphabet[c-'a'] == 0) { return false; } alphabet[c-'a']--; } return true; }
func isAnagram(s string, t string) bool { if len(s) != len(t) { return false } var alphabet [26]int for _, c := range s { alphabet[c-'a']++ } for _, c := range t { if alphabet[c-'a'] == 0 { return false } alphabet[c-'a']-- } return true }
- 算法
- 1.含有unicode字符时,使用map做哈希表
- 2.当两个字符串不一样长度时,一定不是有效的字母异位词
- 3.确保两个字符串一样长度时,只需要遍历两个字符串(在遍历第二个字符串时做检查即可),无需再单独遍历数组进行检查
public boolean isAnagram(String s, String t) { if (s.length() != t.length()) { return false; } HashMap<Character, Integer> map = new HashMap<>(); for (char c : s.toCharArray()) { map.put(c, map.getOrDefault(c, 0)+1); } for (char c : t.toCharArray()) { if (!map.containsKey(c) || map.get(c) == 0) { return false; } else { map.put(c, map.get(c)-1); } } return true; }
func isAnagram(s string, t string) bool { if len(s) != len(t) { return false } dict := make(map[rune]int) for _, c := range s { dict[c] = dict[c] + 1 } for _, c := range t { if x, ok := dict[c]; !ok || x == 0 { return false } else { dict[c] = dict[c] - 1 } } return true }
LeetCode题解 文章被收录于专栏
测试