一、题目描述

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。

示例一

输入: 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相关推荐

  1. 字母异位词分组—leetcode49

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

  2. C#版 - Leetcode49 - 字母异位词分组 - 题解

    C#版 - Leetcode49 - 字母异位词分组 - 题解 Leetcode49.Group Anagrams 在线提交: https://leetcode.com/problems/group- ...

  3. LeetCode--49. 字母异位词分组(哈希表)

    49. 字母异位词分组(哈希表) 1. 题目描述 2. 题目分析 3. Python实现 1. 题目描述 难度:中等 2. 题目分析 这道题的目的就是找出由相同字母组成的字符的集合.非常直观的方法就是 ...

  4. 20200314:字母异位词分组(leetcode49)

    字母异位词分组 题目 思路与算法 代码实现 复杂度分析 题目 思路与算法 思路很简单:进行简单的遍历,将每次得到的字符串进行排序,再存入map,如果map已经中已经出现了排序后的字符串,说明这俩是异位 ...

  5. 算法--------字母异位词分组 (Java 版本)

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

  6. LeetCode 49字母异位词分组50pow(x,n)51八皇后

    原创公众号:bigsai 如果不错记得点赞收藏! 关注回复 bigsai 领取Java进阶pdf资源,回复进群加入力扣打卡群. 上周打卡内容:43字符串相乘&44通配符匹配 45跳跃游戏&am ...

  7. 49. 字母异位词分组

    49. 字母异位词分组 给你一个字符串数组,请你将 字母异位词 组合在一起.可以按任意顺序返回结果列表. 字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母都恰好只用一次. 示例 ...

  8. 【LeetCode】【HOT】49. 字母异位词分组(递归)

    [LeetCode][HOT]49. 字母异位词分组 文章目录 [LeetCode][HOT]49. 字母异位词分组 package hot;import java.util.ArrayList; i ...

  9. leetcode之字母异位词分组

    题目描述: 给你一个字符串数组,请你将 字母异位词 组合在一起.可以按任意顺序返回结果列表. 字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次. 示例 1: 输 ...

最新文章

  1. genisoimage命令用法
  2. 《DSP using MATLAB》示例Example7.25
  3. Linux把文件移动到容器外,Docker容器与主机之间拷贝文件的方法
  4. html加载状态,js等待页面加载完成
  5. mac os 设置汇总
  6. .xyz文件_Orca.xyz:除了银行系统瑞士还有同样安全的数字保险箱
  7. indesign软件教程,如何更改内容颜色?
  8. 层次聚类 簇数_聚类(一):K-means、层次、DBSCAN、均值漂移、K-Means 与 KNN
  9. 【全文干货】python—函数详解(值得收藏的学习手册)
  10. 计算机软件毕业论文周记,毕业论文写作周记范文共12周
  11. discuz手机端默forum.php,discuz手机wap版模板开发方式简述
  12. 戴尔服务器重装系统步骤
  13. 【电脑讲解】笔记本怎么连接宽带,拨号和无线网络连接方法
  14. SpringBoot海景房出租管理系统+代码讲解
  15. Windows10使用自带表情包
  16. wamp环境二次配置
  17. 3_01_GLib库入门与实践_测试框架
  18. NoSQL在腾讯海量数据中的应用与实践
  19. idea 启动页图片更新2022.1以及2021
  20. Kafka:Docker Compose部署Kafka集群

热门文章

  1. c中宏定义的特殊符号
  2. WIN32,GetBitmapBits与GetPixel
  3. 屏蔽ctrl/shift + R/F5
  4. vue 动态渲染图片 不出来
  5. 网易邮箱显示附件上传不成功,请重试!(错误码:FR_INVALID_REQUEST) 的解决方法
  6. 分水岭matlab仿真,正确使用Matlab分水岭算法对细胞进行分割
  7. java中级工程师所需的技能_java工程师简历专业技能填写样本
  8. hw1 COVID-19 Cases prediction
  9. Web安全技术—常见的攻击和防御
  10. Simon IELTS: Reading