作者: 负雪明烛
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:

  1. All inputs will be in lowercase.
  2. 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++)的更多相关文章

  1. LeetCode - 49. Group Anagrams

    49. Group Anagrams Problem's Link ------------------------------------------------------------------ ...

  2. [LeetCode] 49. Group Anagrams 分组变位词

    Given an array of strings, group anagrams together. For example, given: ["eat", "tea& ...

  3. leetcode@ [49] Group Anagrams (Hashtable)

    https://leetcode.com/problems/anagrams/ Given an array of strings, group anagrams together. For exam ...

  4. LeetCode 49 Group Anagrams(字符串分组)

    题目链接: https://leetcode.com/problems/anagrams/?tab=Description   Problem:给一个字符串数组,将其中的每个字符串进行分组,要求每个分 ...

  5. [leetcode]49. Group Anagrams变位词归类

    Given an array of strings, group anagrams together. Example: Input: ["eat", "tea" ...

  6. [leetcode]49. Group Anagrams重排列字符串分组

    是之前的重排列字符串的延伸,判断是重排列后存到HashMap中进行分组 这种HashMap进行分组的方式很常用 public List<List<String>> groupA ...

  7. 【LeetCode】120. Triangle 解题报告(Python)

    [LeetCode]120. Triangle 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址htt ...

  8. 49. Group Anagrams - LeetCode

    Question 49. Group Anagrams Solution 思路:维护一个map,key是输入数组中的字符串(根据字符排好序) Java实现: public List<List&l ...

  9. 【剑指Offer】不用加减乘除做加法 解题报告(Java)

    [剑指Offer]不用加减乘除做加法 解题报告(Java) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题 ...

随机推荐

  1. MYSQL5.8---1

    主键不能为空,唯一键可以为空且可以多个唯一键 外键必须为另一个表中的主键 外键的用途是确保数据的完整性.它通常包括以下几种: 1 实体完整性,确保每个实体是唯一的(通过主键来实施) 2 域完整性,确保 ...

  2. Oracle基础入门

    说明:钓鱼君昨天在网上找到一份oracle项目实战的文档,粗略看了一下大致内容,感觉自己很多知识不够扎实,便跟着文档敲了一遍,目前除了机械性代码没有实现外,主要涉及知识:创建表空间.创建用户.给用户赋 ...

  3. 实时数仓(二):DWD层-数据处理

    目录 实时数仓(二):DWD层-数据处理 1.数据源 2.用户行为日志 2.1开发环境搭建 1)包结构 2)pom.xml 3)MykafkaUtil.java 4)log4j.properties ...

  4. rem.js,移动多终端适配

    window.onload = function(){ /*720代表设计师给的设计稿的宽度,你的设计稿是多少,就写多少;100代表换算比例,这里写100是 为了以后好算,比如,你测量的一个宽度是10 ...

  5. Linux系统根目录下各文件夹介绍

    参考自:[1]Linux 系统根目录下各个文件夹的作用 https://www.cnblogs.com/jiangfeilong/p/10538795.html[2]了解Linux根目录"/ ...

  6. 11-如何通过newman生成不同类型的测试报告

    postman生成测试报告需要一个插件:newman ,并且这个插件需要先安装 . 安装步骤: 安装nodejs: newman是由nodejs开发,所以要先安装它的运行环境,下载地址:http:// ...

  7. 记录一下使用MySQL的left join时,遇到的坑

    # 现象 left join在我们使用mysql查询的过程中可谓非常常见,比如博客里一篇文章有多少条评论.商城里一个货物有多少评论.一条评论有多少个赞等等.但是由于对join.on.where等关键字 ...

  8. iOS UIWebview 长按图片,保存到本地相册

    我们所要解决的问题如题目所示:ios中,长按Webview中的图片,将图片保存到本地相册.解决方案:对load的html网页,执行js注入,通过在webview中执行js代码,来响应点击事件,通过js ...

  9. 3.3 rust HashMap

    The type HashMap<K, V> stores a mapping of keys of type K to values of type V. It does this vi ...

  10. 最小化安装centos ubuntu基础命令

    # yum install vim iotop bc gcc gcc-c++ glibc glibc-devel pcre \ pcre-devel openssl openssl-devel zip ...