字母异位词分组-LeetCode49
一、题目描述
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。
示例一
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例二
输入: strs = [""]
输出: [[""]]
二、解题思路
(1)先将字符串数组中的每一个字符串排序,那么由相同字符组成的不同字符串在排序后必定相同
(2)然后二重循环,将已经内部排好序的字符串进行分组(有更好的做法可以代替此步)
三、代码
class Solution {public List<List<String>> groupAnagrams(String[] strs) {List<List<String>> targetListStr = new ArrayList<>();int len = strs.length;//如果数组长度为0,直接返回Nullif (len == 0) {return targetListStr;}List<String> assistListStr = new ArrayList<>();//如果只有一个字符串,则直接添加if (len == 1) {assistListStr.add(strs[0]);targetListStr.add(assistListStr);return targetListStr;}//assistListStr存储已排序字符串for (String str : strs) {assistListStr.add(sortStr(str));}//两重循环遍历string数组,相同的放在一起即可ArrayList<String> temp = new ArrayList<>();boolean[] used = new boolean[len];for (int i = 0; i < len; i++) {temp = new ArrayList<>();//当前字符串没使用过,则装入集合,否则进入下一次循环if (!used[i]) {temp.add(strs[i]);used[i] = true;}else {continue;}//判断后面的字符串是否与当前assistListStr.get(i)相同,相同则装入字符串数组for (int j = i + 1; j < len; j++) {if (assistListStr.get(i).equals(assistListStr.get(j))) {temp.add(strs[j]);used[j] = true;}}if (temp.size() != 0) {targetListStr.add(temp);}}return targetListStr;}//字符串排序函数public String sortStr(String str) {char[] strArray = str.toCharArray();Arrays.sort(strArray);return new String(strArray);}
}
四、更好解题方法
因为涉及到集合中有相同元素且相同元素归位一类,所以应该想到用哈希。
class Solution {public List<List<String>> groupAnagrams(String[] strs) {Map<String, List<String>> map = new HashMap<String, List<String>>();for (String str : strs) {char[] array = str.toCharArray();Arrays.sort(array);String key = new String(array);//如果map中存在当前key,则取出其对应的List<String>;否则,当前List赋值为nullList<String> list = map.getOrDefault(key, new ArrayList<String>());//字符串添加到listlist.add(str);//修改的list放到map中map.put(key, list);}return new ArrayList<List<String>>(map.values());}
}
字母异位词分组-LeetCode49相关推荐
- 字母异位词分组—leetcode49
给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "tan&quo ...
- C#版 - Leetcode49 - 字母异位词分组 - 题解
C#版 - Leetcode49 - 字母异位词分组 - 题解 Leetcode49.Group Anagrams 在线提交: https://leetcode.com/problems/group- ...
- LeetCode--49. 字母异位词分组(哈希表)
49. 字母异位词分组(哈希表) 1. 题目描述 2. 题目分析 3. Python实现 1. 题目描述 难度:中等 2. 题目分析 这道题的目的就是找出由相同字母组成的字符的集合.非常直观的方法就是 ...
- 20200314:字母异位词分组(leetcode49)
字母异位词分组 题目 思路与算法 代码实现 复杂度分析 题目 思路与算法 思路很简单:进行简单的遍历,将每次得到的字符串进行排序,再存入map,如果map已经中已经出现了排序后的字符串,说明这俩是异位 ...
- 算法--------字母异位词分组 (Java 版本)
题目 字母异位词分组 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串.示例:输入: ["eat", "tea", &quo ...
- LeetCode 49字母异位词分组50pow(x,n)51八皇后
原创公众号:bigsai 如果不错记得点赞收藏! 关注回复 bigsai 领取Java进阶pdf资源,回复进群加入力扣打卡群. 上周打卡内容:43字符串相乘&44通配符匹配 45跳跃游戏&am ...
- 49. 字母异位词分组
49. 字母异位词分组 给你一个字符串数组,请你将 字母异位词 组合在一起.可以按任意顺序返回结果列表. 字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母都恰好只用一次. 示例 ...
- 【LeetCode】【HOT】49. 字母异位词分组(递归)
[LeetCode][HOT]49. 字母异位词分组 文章目录 [LeetCode][HOT]49. 字母异位词分组 package hot;import java.util.ArrayList; i ...
- leetcode之字母异位词分组
题目描述: 给你一个字符串数组,请你将 字母异位词 组合在一起.可以按任意顺序返回结果列表. 字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次. 示例 1: 输 ...
最新文章
- genisoimage命令用法
- 《DSP using MATLAB》示例Example7.25
- Linux把文件移动到容器外,Docker容器与主机之间拷贝文件的方法
- html加载状态,js等待页面加载完成
- mac os 设置汇总
- .xyz文件_Orca.xyz:除了银行系统瑞士还有同样安全的数字保险箱
- indesign软件教程,如何更改内容颜色?
- 层次聚类 簇数_聚类(一):K-means、层次、DBSCAN、均值漂移、K-Means 与 KNN
- 【全文干货】python—函数详解(值得收藏的学习手册)
- 计算机软件毕业论文周记,毕业论文写作周记范文共12周
- discuz手机端默forum.php,discuz手机wap版模板开发方式简述
- 戴尔服务器重装系统步骤
- 【电脑讲解】笔记本怎么连接宽带,拨号和无线网络连接方法
- SpringBoot海景房出租管理系统+代码讲解
- Windows10使用自带表情包
- wamp环境二次配置
- 3_01_GLib库入门与实践_测试框架
- NoSQL在腾讯海量数据中的应用与实践
- idea 启动页图片更新2022.1以及2021
- Kafka:Docker Compose部署Kafka集群
热门文章
- c中宏定义的特殊符号
- WIN32,GetBitmapBits与GetPixel
- 屏蔽ctrl/shift + R/F5
- vue 动态渲染图片 不出来
- 网易邮箱显示附件上传不成功,请重试!(错误码:FR_INVALID_REQUEST) 的解决方法
- 分水岭matlab仿真,正确使用Matlab分水岭算法对细胞进行分割
- java中级工程师所需的技能_java工程师简历专业技能填写样本
- hw1 COVID-19 Cases prediction
- Web安全技术—常见的攻击和防御
- Simon IELTS: Reading