242. Valid Anagram
就是HashMap吧
1 public boolean isAnagram(String s, String t) { 2 if(s == null || t == null || s.length() == 0 || t.length() == 0) { 3 return true; 4 } 5 Map<Character, Integer> map = new HashMap<Character, Integer>(); 6 for(int i = 0; i < s.length(); i++) { 7 char x = s.charAt(i); 8 if(map.containsKey(x)) { 9 map.put(x, map.get(x) + 1); 10 } else { 11 map.put(x, 1); 12 } 13 } 14 for(int i = 0; i < t.length(); i++) { 15 char x = t.charAt(i); 16 if(map.containsKey(x)) { 17 int cnt = map.get(x); 18 if(cnt == 1) { 19 map.remove(x); 20 } else { 21 map.put(x, cnt - 1); 22 } 23 } else { 24 return false; 25 } 26 } 27 return map.isEmpty(); 28 }
好吧,我写得太丑了
别人的方法:https://discuss.leetcode.com/topic/20314/accepted-java-o-n-solution-in-5-lines/2
实在是很好看= =……下次还是要看看别人写的
因为一共就26的字母,他建立了一个长度为26的int字符,s中出现的字母就在指定位置上+1,t出现就-1. 如果是anagram最后结果应该全是0
1 public boolean isAnagram(String s, String t) { 2 if(s == null || t == null || s.length() != t.length()) { 3 return false; 4 } 5 int[] cntLetter = new int[26]; 6 for(int i = 0; i < s.length(); i++) { 7 cntLetter[s.charAt(i) - 'a']++; 8 cntLetter[t.charAt(i) - 'a']--; 9 } 10 for(int i = 0; i < 26; i++) { 11 if(cntLetter[i] != 0) { 12 return false; 13 } 14 } 15 return true; 16 }