class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
/**
错误的想法:通过ascll码值之和来判断是否为字母异位词,因为即便字母都不相同,但他们的ascll码值之和却仍然有可能相同,
所以这并不能作为判断的根据。
正确的想法:应该通过将字符串内的字符进行排序后,将排序后生成的字符串作为hashTable的主键来进行使用,这样来进行强判断,
即强制性的判断字母是否完全一样。
*/
//1.新建一个哈希表,用于算法使用
Map<String,List<String>> hashTable = new HashMap<>();
for(int i = 0;i < strs.length;i++){
//2.现将当前字符串进行再排序
char[] chars = strs[i].toCharArray();
Arrays.sort(chars);
String newStr = new String(chars);
//3.通过再排序后的字符串作为hashTable的主键来更新HashTable
//3.1先根据newStr取出当前的hashTable中的对应的List,若不存在该主键,则新建一个List并返回
List list = hashTable.getOrDefault(newStr,new ArrayList<String>());
//3.2更新List并将更新后的List覆盖掉原本的List
list.add(strs[i]);
hashTable.put(newStr,list);
}
return new ArrayList<List<String>>(hashTable.values());
}
}
leetcode49. 字母异位词分组
于 2024-03-04 21:37:21 首次发布