文章目录

  • 题目描述
  • 代码 & 思路

题目描述

  • 考虑:如何把字母相同、排列不同的字符串组合成一个相同的、独一无二的东西?
  • 尝试1:使用ascii的和(不行,虽然说确实相同,但是独一无二不满足)
  • 尝试2:按序组合成字母 + 出现次数(可以,比如 aabcc => a2b1c2)
  • 思路3:字母映射成质数,用质数的乘法求解(貌似可以,不过没有实际尝试)

代码 & 思路

  • 用 尝试2:按序组合成字母 + 出现次数(可以,比如 aabcc => a2b1c2)的方法
  • 遍历字符串数组,逐个转化成类似 a2b1c2 的形式。
  • 通过 HashMap 来判断是否出现过, O(1)
  • 出现过,则放入对应的 ArrayList 中;
  • 未出现,则新建 ArrayList,并且 put <string s, index> 到 HashMap 中(维护 hashmap)
class Solution {public List<List<String>> groupAnagrams(String[] strs) {List<List<String>> ans = new ArrayList<>();// k:字符串长度;  v:对应组合的下标Map<String,Integer> hashmap = new HashMap<>();// O(n*(k+26))for(String s : strs){String temp = getGroup(s);// 已经存入的情况下,加入已有ArrayListif(hashmap.containsKey(temp)){ans.get(hashmap.get(temp)).add(s);}// 否则,新建ArrayList & 映射else {ans.add(new ArrayList<String>());ans.get(ans.size()-1).add(s);hashmap.put(temp,ans.size()-1);}}return ans;}// group 归类String getGroup(String s){int[] alpha = new int[26];for(char ch : s.toCharArray()){alpha[ch-'a']++;}StringBuilder sb = new StringBuilder();for(int i=0;i<26;i++){if(alpha[i]!=0){sb.append((char)('a' + i));sb.append((char)('0' + alpha[i]));}}return sb.toString();}
}

【LeetCode笔记】49. 字母异位词分组(Java、字符串、哈希表)相关推荐

  1. 【LeetCode】49.字母异位词分组 (三种解法开拓思路,java实现)

    49. 字母异位词分组 分析 方法一:排序数组分类 思路 当且仅当它们的排序字符串相等时,两个字符串是字母异位词. 算法 维护一个映射 ans : {String -> List},其中每个键 ...

  2. leetCode C++ 49. 字母异位词分组 给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

    一.思路: 对每一个字符串排序,然后将这个排序的字符串加到map里面,对于每一个新遍历的字符串就和map比较是否相等. 最开始用map,会出现超时,于是采用hash实现结构的unordered_map ...

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

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

  4. Leetcode刷题100天—49. 字母异位词分组( 排序)—day37

    前言: 作者:神的孩子在歌唱 大家好,我叫运智 49. 字母异位词分组 难度中等847收藏分享切换为英文接收动态反馈 给你一个字符串数组,请你将 字母异位词 组合在一起.可以按任意顺序返回结果列表. ...

  5. leetcode 49. 字母异位词分组

    49. 字母异位词分组 - 力扣(LeetCode) 一开始想的是把各个字符串中每个字符ascii码值相加,然后相同的ascii码值放在一个组,在相同的ascii码值组中再去细找字母异位词. 一开始算 ...

  6. 49. 字母异位词分组

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

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

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

  8. LeetCode 49. 字母异位词分组(哈希)

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

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

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

  10. leetcode 49. 字母异位词分组(排序+hash)

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

最新文章

  1. android 图片横竖判断_Android横竖屏切换及其对应布局加载问题详解
  2. Windows python用impyla连接远程Hive数据库
  3. BJUI实现每日数据汇总默认显示某天的数据
  4. 神经网络 | 单层感知器从0到1(附Python源代码)
  5. paloalto防火墙执行初始配置
  6. 编写junit 测试_编写JUnit测试的另一种方法(Jasmine方法)
  7. 解决spring和struts配合问题
  8. 微服务升级_SpringCloud Alibaba工作笔记0016---Nacos之服务提供者注册
  9. GetProcAddress()函数动态调用DLL中的函数,是否必须通过extern C声明导出函数?
  10. 剑指offer面试题57. 和为s的两个数字(双指针)
  11. css table布局大法,解决你大部分居中、多列等高、左右布局的问题
  12. VS代码中明明有NO_BITMAP字串,提示找不到
  13. 安装MySQL出现:无法定位序数4699于动态链接库 ...\bin\mysqld.exe
  14. java实现简单泡泡屏保动画及点击变实心泡泡
  15. 一个屌丝程序员的青春(三六五)
  16. nginx 去除index php,nginx怎么去除index.php
  17. Mac系统升级中途断电/关机,升级/开机失败的恢复方法
  18. VGA数模转换电阻匹配网络分析
  19. AirtestIDE1.2.13的安卓手机设置自动初始化功能
  20. 算法 A 求稳健平均值和稳健标准差

热门文章

  1. 总结下载Spring Framework的jar包
  2. 谷歌浏览器手势_分享一些日常手势[狗头]
  3. 服务器物理内存总是九十几,Solr总是使用超过90%的物理内存(Solr always use more than 90% of physical memory)...
  4. 图书管理系统可行性分析报告范例_会做可行性分析报告贺州专家团队*金
  5. java怎么安装_Windows、Linux、Mac下安装JDK
  6. C++查看各种数据类型所占字节和最大最小值(数据范围)
  7. OpenCV与图像处理学习九——连通区域分析算法(含代码)
  8. Linux开发cocos2dx程序环境搭建
  9. Effective Java -- 思维导图
  10. c语言assign用法,object-c语言的nonatomic,assign,copy,retain的区别