给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

示例:

输入: ["eat", "tea", "tan", "ate", "nat", "bat"],
输出:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
说明:

所有输入均为小写字母。
不考虑答案输出的顺序。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/group-anagrams

这题没什么技巧,关键在于有没有想到用Map映射 ans : {String -> List}分类

排序数组分类

思路:当且仅当它们的排序字符串相等时,两个字符串是字母异位词。

我的代码:

public class Solutiontemp {
public List<List<String>> groupAnagrams(String[] strs) {
HashMap<String,ArrayList<String>> map = new HashMap<>();
for (int i=0;i<strs.length;i++) {
char[] c = strs[i].toCharArray();
Arrays.sort(c);
String key = String.valueOf(c);
// String key = c.toString(); 这个写法会输出错误,两个排列相同的char[]是不同的对象,toString后居然也是不同的对象
if (map.containsKey(key)) {
ArrayList<String> list = new ArrayList<>(map.get(key));
list.add(strs[i]);
map.put(key,list);
} else {
ArrayList<String> list = new ArrayList<>();
list.add(strs[i]);
map.put(key,list);
}
}
List<List<String>> res = new ArrayList<>();
for (String key : map.keySet()) {
System.out.println(key);
res.add(map.get(key));
}
return res;
} public static void main(String[] args) {
String[] str = new String[]{"eat","tea","tan","ate","nat","bat"};
Solutiontemp solutiontemp
= new Solutiontemp();
System.out.println(solutiontemp.groupAnagrams(str));
}
}

同样思路参考解法很简洁:

class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
if (strs == null || strs.length ==0) return new ArrayList<List<String>>();
Map<String, List<String>> map= new HashMap<>();
for (String str : strs) {
char[] tmp = str.toCharArray();
Arrays.sort(tmp);
String keyStr = String.valueOf(tmp);
if (! map.containsKey(keyStr)) map.put(keyStr,new ArrayList<String>());
map.get(keyStr).add(str);
}
return new ArrayList<>(map.values()); }
} 链接:https://leetcode-cn.com/problems/two-sum/solution/zhao-dao-wei-yi-de-

最新文章

  1. 浅析UPnP协议
  2. 【Python实战】Scrapy豌豆荚应用市场爬虫
  3. sprintf()函数的用法
  4. Navicat Premium下sql导入中文乱码解决方案
  5. hdu1272 小希的迷宫
  6. zepto源码--filtered, contains,funcArg,setAttribute,className,deserializeVale--学习笔记
  7. HTML data属性简介以及低版本浏览器兼容算法
  8. 161116、springmvc自己实现防止表单重复提交(基于注解)
  9. 在mac上安装svn客户端
  10. Core Java 学习笔记——1.术语/环境配置/Eclipse汉化字体快捷键/API文档
  11. Spring Framework 4.1.1
  12. HW--漂亮度
  13. 安装Android Studio报failed to find java version for &#39;C:\windows\system32\java.exe&#39;:[2] The system cannot find the specified file.错误的解决方案
  14. eclipse配置tomcat及修改tomcat默认根目录
  15. 二 APPIUM Android自动化 环境搭建
  16. Beauty Contest 凸包+旋转卡壳法
  17. C# 把Div变为滚动条
  18. TCP协议(二)——TIME_WAIT状态
  19. C++ 11 左值,右值,左值引用,右值引用,std::move, std::foward
  20. JAVA基础知识回顾(面试资料)

热门文章

  1. Java操作ElasticSearch之创建客户端连接
  2. csv数据的读取和写入,以及好看的可视化
  3. c语言基础之getopt()
  4. Linux文件服务管理之Samba
  5. Linux操作系统安全-加密和安全扫盲篇
  6. 洛谷P2365 任务安排(斜率优化dp)
  7. JavaScript之保留两位小数
  8. 洛谷 CF997A Convert to Ones
  9. postMessage的使用
  10. 牛客NOIP暑期七天营-提高组1