【LeetCode笔记】49. 字母异位词分组(Java、字符串、哈希表)
文章目录
- 题目描述
- 代码 & 思路
题目描述
- 考虑:如何把字母相同、排列不同的字符串组合成一个相同的、独一无二的东西?
- 尝试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、字符串、哈希表)相关推荐
- 【LeetCode】49.字母异位词分组 (三种解法开拓思路,java实现)
49. 字母异位词分组 分析 方法一:排序数组分类 思路 当且仅当它们的排序字符串相等时,两个字符串是字母异位词. 算法 维护一个映射 ans : {String -> List},其中每个键 ...
- leetCode C++ 49. 字母异位词分组 给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
一.思路: 对每一个字符串排序,然后将这个排序的字符串加到map里面,对于每一个新遍历的字符串就和map比较是否相等. 最开始用map,会出现超时,于是采用hash实现结构的unordered_map ...
- 【LeetCode】【HOT】49. 字母异位词分组(递归)
[LeetCode][HOT]49. 字母异位词分组 文章目录 [LeetCode][HOT]49. 字母异位词分组 package hot;import java.util.ArrayList; i ...
- Leetcode刷题100天—49. 字母异位词分组( 排序)—day37
前言: 作者:神的孩子在歌唱 大家好,我叫运智 49. 字母异位词分组 难度中等847收藏分享切换为英文接收动态反馈 给你一个字符串数组,请你将 字母异位词 组合在一起.可以按任意顺序返回结果列表. ...
- leetcode 49. 字母异位词分组
49. 字母异位词分组 - 力扣(LeetCode) 一开始想的是把各个字符串中每个字符ascii码值相加,然后相同的ascii码值放在一个组,在相同的ascii码值组中再去细找字母异位词. 一开始算 ...
- 49. 字母异位词分组
49. 字母异位词分组 给你一个字符串数组,请你将 字母异位词 组合在一起.可以按任意顺序返回结果列表. 字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母都恰好只用一次. 示例 ...
- LeetCode 49字母异位词分组50pow(x,n)51八皇后
原创公众号:bigsai 如果不错记得点赞收藏! 关注回复 bigsai 领取Java进阶pdf资源,回复进群加入力扣打卡群. 上周打卡内容:43字符串相乘&44通配符匹配 45跳跃游戏&am ...
- LeetCode 49. 字母异位词分组(哈希)
1. 题目 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例:输入: ["eat", "tea", "ta ...
- LeetCode 49. 字母异位词分组 Group Anagrams
给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "tan&quo ...
- leetcode 49. 字母异位词分组(排序+hash)
给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "tan&quo ...
最新文章
- android 图片横竖判断_Android横竖屏切换及其对应布局加载问题详解
- Windows python用impyla连接远程Hive数据库
- BJUI实现每日数据汇总默认显示某天的数据
- 神经网络 | 单层感知器从0到1(附Python源代码)
- paloalto防火墙执行初始配置
- 编写junit 测试_编写JUnit测试的另一种方法(Jasmine方法)
- 解决spring和struts配合问题
- 微服务升级_SpringCloud Alibaba工作笔记0016---Nacos之服务提供者注册
- GetProcAddress()函数动态调用DLL中的函数,是否必须通过extern C声明导出函数?
- 剑指offer面试题57. 和为s的两个数字(双指针)
- css table布局大法,解决你大部分居中、多列等高、左右布局的问题
- VS代码中明明有NO_BITMAP字串,提示找不到
- 安装MySQL出现:无法定位序数4699于动态链接库 ...\bin\mysqld.exe
- java实现简单泡泡屏保动画及点击变实心泡泡
- 一个屌丝程序员的青春(三六五)
- nginx 去除index php,nginx怎么去除index.php
- Mac系统升级中途断电/关机,升级/开机失败的恢复方法
- VGA数模转换电阻匹配网络分析
- AirtestIDE1.2.13的安卓手机设置自动初始化功能
- 算法 A 求稳健平均值和稳健标准差
热门文章
- 总结下载Spring Framework的jar包
- 谷歌浏览器手势_分享一些日常手势[狗头]
- 服务器物理内存总是九十几,Solr总是使用超过90%的物理内存(Solr always use more than 90% of physical memory)...
- 图书管理系统可行性分析报告范例_会做可行性分析报告贺州专家团队*金
- java怎么安装_Windows、Linux、Mac下安装JDK
- C++查看各种数据类型所占字节和最大最小值(数据范围)
- OpenCV与图像处理学习九——连通区域分析算法(含代码)
- Linux开发cocos2dx程序环境搭建
- Effective Java -- 思维导图
- c语言assign用法,object-c语言的nonatomic,assign,copy,retain的区别