leetCode49.字母异位词分组
2021/5/3 10:26:50
本文主要是介绍leetCode49.字母异位词分组,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
leetCode49.字母异位词分组
题目描述
/** * 给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。 */
思路分析
- 字母异位词,及他们所包含的每一个字符相同,但是排列顺序相同,要将这些排列顺序不同的字符串加入到同一个集合中,就要找出他们的相同点
- 很明显,如果将他们按照一定的顺序排序(每一个从大到小或者从小到大),则得到的字符序列是一样的,再将字符序列转换为字符串,则这些字符串也相同
- 因此他们的特征值就是这些相同的字符串
- 再考虑如何存储这些字符异位词,因为最后以List的形式返回,所以很容易想到散列表
- 使用散列表的键存储这些特征值,值存储字母异位词
- 还有一个问题,就是如何将相同特征值的字符串添加到同一个集合中?
- 使用HashMap集合的getOrDefault(Object key, V defaultValue)方法,返回到指定键所映射的值,或 defaultValue如果此映射包含该键的映射。
- 上述方法可以简单理解为如果key相同,则返回的是同一个值,也就是同一个集合
- 然后将这些字母异位词加入到集合中,再将特征值和这个集合添加到HashMap中
- 最后返回的是HashMap集合中的各个值,也就是各个集合
- 可以遍历Hash集合然后将各个值添加到一个新集合,然后将新集合返回
- 也可以直接调用HashMap的values方法拿到所有的值直接添加到集合中返回
代码及分析
public List<List<String>> groupAnagrams(String[] strs) { //使用HashMap存储,键存储字母异位词的相同点,值存储这一组异位词 HashMap<String, List<String>> map = new HashMap<>(); //遍历字符串数组 for (String str : strs) { //将字符串转化为字符数组 char[] chars = str.toCharArray(); //调用排序方法 Arrays.sort(chars); //将排序后的字符数组构成一个特征值字符串 String s = new String(chars); //注意: //对这个方法的理解 //getOrDefault(Object key, V defaultValue) //返回到指定键所映射的值,或 defaultValue如果此映射包含该键的映射。 //即如果字符串s相同,返回的就是同一个list List<String> list = map.getOrDefault(s, new ArrayList<String>()); //将具有相同特征的字符串添加 list.add(str); //然后将特征值和list添加到map中 map.put(s,list); } //最后将hashMap中的list以集合的形式返回 return new ArrayList<List<String>>(map.values()); }
这篇关于leetCode49.字母异位词分组的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-27Excel中实现拖动排序的简单教程
- 2024-11-27Rocket消息队列资料:新手入门指南
- 2024-11-27rocket消息队资料详解与入门指南
- 2024-11-27RocketMQ底层原理资料详解入门教程
- 2024-11-27RocketMQ项目开发资料:新手入门教程
- 2024-11-27RocketMQ项目开发资料详解
- 2024-11-27RocketMQ消息中间件资料入门教程
- 2024-11-27初学者指南:深入了解RocketMQ源码资料
- 2024-11-27Rocket消息队列学习入门指南
- 2024-11-26Rocket消息中间件教程:新手入门详解