题目
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例
1 | 输入: ["eat", "tea", "tan", "ate", "nat", "bat"], |
说明
- 所有输入均为小写字母。
- 不考虑答案输出的顺序。
题解
方法一:先采用sort排序,将具有相同字符的不同字符串转化为同一个字符串,Map<String,Integer>中key存的是排序后的字符串,value存的是List<List
例如:”eat”,”tea”。排序后都为“aet”,list:”eat”(加进去);HashMap: “aet”,0;res:[“eat”];下一次循环碰到”tea”,它排序后的结果也是“aet”,所以“tea”应该和eat放在一个list里面,我们先检查HashMap里面是否包含“aet”,包含则找到该list,把它加入,对应的代码为:res.get(map.get(s))
;以此进行。
方法二:不排序,而是用一个Map<Character,Integer>这个结构来记录具有相同字符的字符串,方法二整体用两层hash,Map<Map<字母,次数>,List<单词>>这样一个结构。
代码
1 | public class solution { |