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

示例:

输入: ["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-

【leetcode-49】字母异位词分组的更多相关文章

  1. LeetCode 49: 字母异位词分组 Group Anagrams

    LeetCode 49: 字母异位词分组 Group Anagrams 题目: 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. Given an array o ...

  2. Java实现 LeetCode 49 字母异位词分组

    49. 字母异位词分组 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", & ...

  3. Leetcode 49.字母异位词分组

    字母异位词分组 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", " ...

  4. LeetCode 49. 字母异位词分组(Group Anagrams)

    题目描述 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "ta ...

  5. 【LeetCode】49. 字母异位词分组

    49. 字母异位词分组 知识点:字符串:哈希表 题目描述 给你一个字符串数组,请你将 字母异位词 组合在一起.可以按任意顺序返回结果列表. 字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源 ...

  6. LeetCode:字母异位词分组【16】

    LeetCode:字母异位词分组[16] 题目描述 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", &quo ...

  7. leetcode TOP100 字母异位词分组

    字母异位词分组 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 思路: 一个map,将每个字符串字符进行记数,字符作为map的key,次数初始为零,以此来标识字 ...

  8. Leetcode题库——49.字母异位词分组【##】

    @author: ZZQ @software: PyCharm @file: leetcode49_groupAnagrams.py @time: 2018/11/19 13:18 要求:给定一个字符 ...

  9. Leetcode题目49.字母异位词分组(中等)

    题目描述: 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "t ...

  10. leetcode刷题-49字母异位词分组

    题目 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 思路 由于异位词由相同字母构成,所以可以用一个顺序的字符串作为这些字母异位词的标志,由此可以想到字典的方法 ...

随机推荐

  1. FileZilla_Server:425 Can't open data connection 问题解决

    25 Can't open data connection 和 读取目录列表失败 问题解决 这个问题主要是由于使用Passive Mode模式造成的,解决这个问题很简单:1.在ftp服务软件中设置指定 ...

  2. 虚拟机配置静态ip

    参考地址  https://www.cnblogs.com/maowenqiang/articles/7727910.html TYPE=EthernetBOOTPROTO="static& ...

  3. js 字符串 有没有 像C# @ 那种 换行也可以显示的方法 \

  4. OEL7.6安装Oracle Database 19C(VERSION 19.3.0.0)

    1.eDelivery中下载Oracle Database 19C和Oel的安装介质,并安装好操作系统 2.安装Oracle环境准备工具 环境准备工具会自动完成用户和用户组的创建.系统参数配置.依赖包 ...

  5. window配合虚拟机VMware搭建虚拟ubuntu服务器入坑集锦

    1.VMware虚拟机和主机进行网络连接设置 https://jingyan.baidu.com/article/adc81513b86621f723bf7383.html 2.解决linux虚拟机与 ...

  6. spring boot缓存excel临时文件后再操作

    1. 引入poi的两个依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi ...

  7. ant笔记

    目录 ant远程部署 ant的使用,命令! 参考文献: ant+maven一键打包springboot上传服务器发布 判断linux文件.文件夹是否存在 shell中脚本参数传递的两种方式 shell ...

  8. 部署ceph存储集群及块设备测试

    集群环境 配置基础环境 添加ceph.repo wget -O /etc/yum.repos.d/ceph.repo https://raw.githubusercontent.com/aishang ...

  9. Alipay SDK验签PHP低于5.5版本错误

    低于PHP5.5版本不支持OPENSSL_ALGO_SHA256函数,要想使用RSA2加密,把OPENSSL_ALGO_SHA256函数替换为:sha256WithRSAEncryption 解密方法 ...

  10. 使用async进行结构化并发程序开发

    异步风格的函数: 继续来学习async相关的东东,对于它其实可以用到函数上,也就是用它可以定义一个异步风格的函数,然后在该函数中再来调用普通的函数,下面来瞅一下: 其实“GlobalScope.asy ...