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     }

 

posted @ 2016-07-30 01:57  warmland  阅读(159)  评论(0编辑  收藏  举报