Anagrams
Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
我的解题思路是这样的:1.其实所谓的anagrams就是字母相同就ok了
2.把每个数组里面的数字以字典序进行重新排序形成fingerprint
3.判断排序过得串是否在hashmap里面,如果在里面就加一,说明这个fingerprint 有了
有的话表明这个fingerprint对应的String是anagrams
4.用strs里面的string 扫一下map ,如果fingerprint对应的数目大于1,
则表示这个String就是所要的了,记录结果就好。
用到的函数
String.toCharArray();
Arrays.toString();
Hashmap.containsKey();
Hashmap.put(String,Integer);
public class Solution {
public List<String> anagrams(String[] strs) {
List<String> result = new ArrayList<String>();
if (strs == null || strs.length == 0 ) {
return result;
}
HashMap<String,Integer> hmaps = new HashMap<String,Integer>();
for (int i = 0; i < strs.length; i++) {
String curSort = sortString(strs[i]);
if (hmaps.containsKey(curSort)) {
hmaps.put(curSort, hmaps.get(curSort) + 1);
} else {
hmaps.put(curSort, 1);
}
}
for(int i = 0; i < strs.length; i++) {
if (hmaps.containsKey(sortString(strs[i])) && hmaps.get(sortString(strs[i])) > 1) {
result.add(strs[i]);
}
}
return result;
}
String sortString(String str) {
char [] charArr = str.toCharArray();
Arrays.sort(charArr);
return Arrays.toString(charArr);
}
}