【LeetCode】49. Group Anagrams 解题报告(Python & Java & C++)
作者: 负雪明烛
id: fuxuemingzhu
个人博客: http://fuxuemingzhu.cn/
题目地址:https://leetcode.com/problems/anagrams/#/description
题目描述
Given an array of strings, group anagrams together.
Example:
Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
Note:
- All inputs will be in lowercase.
- The order of your output does not matter.
题目大意
把相同字符的字符串组成相同的group,然后返回。
解题方法
排序+hash
这个题目方法很容易想到,只要判断两个字符串是不是相同字符组成的就好了。一种简单的方法是使用hash保存对每个字符串按字母表重新排序的结果。这样的好处在字符串的长度都很短,排序花销很小,这样就可以加快运行速度。
时间复杂度在O(nmlog(m))。其中m是字符串的长度。
public class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
if (strs == null || strs.length == 0) {
List<List<String>> ans = new ArrayList<List<String>>();
return ans;
}
HashMap<String, List<String>> hash = new HashMap<String, List<String>>();
for (String s : strs) {
char ca[] = s.toCharArray();
Arrays.sort(ca);
String temp = String.valueOf(ca);
if (!hash.containsKey(temp)) {
List<String> vals = new ArrayList<String>();
vals.add(s);
hash.put(temp, vals);
} else {
hash.get(temp).add(s);
}
}
List<List<String>> ans = new ArrayList<List<String>>();
ans.addAll(hash.values());
return ans;
}
}
二刷 python
对字符串进行排序,同样的字符串聚集在一起,用列表保存在一起就好了。
class Solution(object):
def groupAnagrams(self, strs):
"""
:type strs: List[str]
:rtype: List[List[str]]
"""
res = collections.defaultdict(list)
for string in strs:
sorted_str = ''.join(sorted(string))
res[sorted_str].append(string)
return res.values()
三刷,C++
在C++里面注意sort是在原地操作的,所以要把字符串复制一份,否则会修改原来的字符串。
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
unordered_map<string, vector<string>> m_;
for (string str: strs) {
string sort_str = str;
sort(sort_str.begin(), sort_str.end());
m_[sort_str].push_back(str);
}
vector<vector<string>> res;
for (auto m : m_) {
res.push_back(m.second);
}
return res;
}
};
日期
2017 年 4 月 9 日
2018 年 3 月 21 日
2019 年 1 月 2 日 —— 2019年开刷
【LeetCode】49. Group Anagrams 解题报告(Python & Java & C++)的更多相关文章
- LeetCode - 49. Group Anagrams
49. Group Anagrams Problem's Link ------------------------------------------------------------------ ...
- [LeetCode] 49. Group Anagrams 分组变位词
Given an array of strings, group anagrams together. For example, given: ["eat", "tea& ...
- leetcode@ [49] Group Anagrams (Hashtable)
https://leetcode.com/problems/anagrams/ Given an array of strings, group anagrams together. For exam ...
- LeetCode 49 Group Anagrams(字符串分组)
题目链接: https://leetcode.com/problems/anagrams/?tab=Description Problem:给一个字符串数组,将其中的每个字符串进行分组,要求每个分 ...
- [leetcode]49. Group Anagrams变位词归类
Given an array of strings, group anagrams together. Example: Input: ["eat", "tea" ...
- [leetcode]49. Group Anagrams重排列字符串分组
是之前的重排列字符串的延伸,判断是重排列后存到HashMap中进行分组 这种HashMap进行分组的方式很常用 public List<List<String>> groupA ...
- 【LeetCode】120. Triangle 解题报告(Python)
[LeetCode]120. Triangle 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址htt ...
- 49. Group Anagrams - LeetCode
Question 49. Group Anagrams Solution 思路:维护一个map,key是输入数组中的字符串(根据字符排好序) Java实现: public List<List&l ...
- 【剑指Offer】不用加减乘除做加法 解题报告(Java)
[剑指Offer]不用加减乘除做加法 解题报告(Java) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题 ...
随机推荐
- Shell 格式化输出printf、awk
目录 Shell 文件的格式化与相关处理 printf.awk 格式化打印printf 案例.格式化输出文件内容 输出命令echo 案例 awk数据处理工具 语法格式 处理流程 AWK内置变量 条件 ...
- 乱序拼图验证的识别并还原-puzzle-captcha
一.前言 乱序拼图验证是一种较少见的验证码防御,市面上更多的是拖动滑块,被完美攻克的有不少,都在行为轨迹上下足了功夫,本文不讨论轨迹模拟范畴,就只针对拼图还原进行研究. 找一个市面比较普及的顶像乱序拼 ...
- Shell学习(六)——条件判断总结
Shell学习(六)--条件判断总结 [1]https://www.cnblogs.com/zhw-626/p/8528001.html [2]https://www.cnblogs.com/yizh ...
- RAC中常见的高级用法-过滤
filter 过滤信号,使用它可以获取满足条件的信号. - (void)filter { //只有当我们文本框内容长度大于5才想要获取文本框的内容 [[_passWord.rac_textS ...
- java foreach循环抛出异常java.util.ConcurrentModificationException
代码如下: for (Iterator<String> iter = list.iterator(); iter.hasNext(); ) { if (Integer.parseInt(i ...
- 【Java基础】方法调用机制——MethodHandle
MethodHandle是Java7引入的一种机制,主要是为了JVM支持动态语言. 一个MethodHandle调用示例 共有方法调用 首先,演示一下最基本的MethodHandle使用. 第一步:创 ...
- 使用jstl和el表达式来展示request域中存放的user对象的信息
<%@ page import="java.util.ArrayList" %><%@ page import="java.util.List" ...
- ASP.NET Web API路由解析
前言 本篇文章比较长,仔细思考阅读下来大约需要15分钟,涉及类图有可能在手机显示不完整,可以切换电脑版阅读. 做.Net有好几年时间了从ASP.NET WebForm到ASP.NET MVC再到ASP ...
- 『学了就忘』Linux服务管理 — 75、Linux系统中的服务
目录 1.服务的介绍 2.Windows系统中的服务 3.Linux系统中服务的分类 4.独立的服务和基于xinetd服务的区别 5.如何查看一个服务是独立的服务还是基于xinetd的服务 (1)查看 ...
- Jenkins远程发布制品
目录 一.简介 二.实现 一.简介 WEB服务很少会与Jenkins服务器在同一台机器,所以需要将构建好的制品包,发放到远程服务器进行部署. 二.实现 插件名:Publish over SSH 作用: ...