4.10字母异位词分组 哈希表
我的方法(会tle)
import java.util.*;
class Solution {
public List<List
List<List
List
//把一个字符串每个字母都存放在一个临时的list2里面
for(String s : strs){
char[] chars = s.toCharArray();
Arrays.sort(chars);
//遍历哈希表,如果存在相同的字母组合,就把当前的字符串索引存放在对应的list里面
int i=0;
boolean flag=true;
for(List
for(String str :newlist){
char[] chars1 = str.toCharArray();
Arrays.sort(chars1);
if(!Arrays.equals(chars, chars1)){
//代表这是一个新的字母组合
flag=false;
}
else{
flag=true;
}
if(flag){
result.get(i).add(s);
break;
//如果存在这样一个字母组合,就把当前的字符串索引存放在对应的list里面
}
break;
}
if(flag){break;}
i++;
}
if(!flag||result.size()==0){
result.add(new ArrayList<String>());
result.get(result.size()-1).add(s);
}
list2.clear();
}
return result;
}
}
利用二层list和很多判断,把每个string依次存进不同的区域
ai的方法:
import java.util.*;
class Solution {
public List<List
// 用于存储排序后的字符串和对应的字母异位词组
Map<String, List
for (String str : strs) {
// 将字符串转换为字符数组
char[] charArray = str.toCharArray();
// 对字符数组进行排序
Arrays.sort(charArray);
// 将排序后的字符数组转换为字符串
String sortedStr = new String(charArray);
// 如果排序后的字符串不在 map 中,创建一个新的列表
map.computeIfAbsent(sortedStr, k -> new ArrayList<>()).add(str);
}
// 返回 map 中的所有值,即分组后的字母异位词组
return new ArrayList<>(map.values());
}
}
学习到的点:
1.如何把一个列表进行初始化
List
2.最后返回的ArrayList不用在一开始新建,<>可看作会自动补全类型
3. map.computeIfAbsent(sortedStr, k -> new ArrayList<>()).add(str);
检查某个键(这里是sortedStr)是否存在,如果存在,方法直接返回key关联的ArrayList;如果不存在,则执行lambda表达式新建一个ArrayList
4. return new ArrayList<>(map.values());这里每一个map。values都是一个List

浙公网安备 33010602011771号