字母异位词分组
思路1:排序
这里需要看每个字符串的本质,将每个字符串转化成字符数组之后,排序,然后便能得到基础顺序,用这个基础顺序为键值,便能循环判断并将字符串分类
上代码:
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
if(strs.length==0)
return new ArrayList<>();
Map<String,List> map=new HashMap<>();
for(String s:strs){
char[] ch=s.toCharArray();
Arrays.sort(ch);
String k=String.valueOf(ch);
if(!map.containsKey(k))
map.put(k,new ArrayList());
map.get(k).add(s);
}
return new ArrayList(map.values());
}
}
PS:回顾一下valueOf()函数
思路2:转化
其实也是看字符串的本质,统计一个字符串中各个字符出现的次数,将这个次数转换成一个数字字符串作为键值。
上代码:
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
if(strs.length==0)
return new ArrayList<>();
Map<String,List> map=new HashMap<>();
int[] count=new int[26];
for(String s:strs){
Arrays.fill(count,0);
for(char c:s.toCharArray()){
count[c-'a']++;
}
StringBuilder sb=new StringBuilder();
for(int j=0;j<26;j++){
sb.append(count[j]);
}
String key=sb.toString();
if(!map.containsKey(key)){
map.put(key,new ArrayList<String>());
map.get(key).add(s);
}else
map.get(key).add(s);
}
return new ArrayList(map.values());
}
}