49. Group Anagrams

转载 2016年05月31日 13:47:52

题目:

Given an array of strings, group anagrams together.

For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"]
Return:

[
  ["ate", "eat","tea"],
  ["nat","tan"],
  ["bat"]
]

Note:

  1. For the return value, each inner list's elements must follow the lexicographic order.
  2. All inputs will be in lower-case.


题意:

给定一个字符串数组,将相同字符的字符串分组。

note:

1、对于结果集,每一个内部集合元素都必须遵循字典顺序;

2、所有的输入集合都是小写字符;


思路:

先将输入字符串数组排序,按照字典顺序排序。之后将每个小字符串分解成字符数组之后,同样按照字典顺序排序之后作为map集合的键,将具有相同元素的字符串放到同一集合中,最后将map中的值转化为输出集。

代码:java版:34ms

public class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        if(strs==null || strs.length==0){
            return new ArrayList<List<String>>();
        }
        Map<String, List<String>> map = new HashMap<String, List<String>>();
        Arrays.sort(strs); //确定字典顺序
        for(String s : strs){
            char[] ca = s.toCharArray();  //将每一个字符串转换成字符数组
            Arrays.sort(ca);  //对字符数组排序
            String keyStr = String.valueOf(ca); //将排序后的字符数组转换成字符串
            if(!map.containsKey(keyStr)){  //如果map集合中没有该字符串,则添加新建一个
                map.put(keyStr, new ArrayList<String>());
            }
            map.get(keyStr).add(s);  //将原字符串加入到对应的具有相同元素的map中
        }
        return new ArrayList<List<String>>(map.values());
    }
}
C++版:82ms

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        
        unordered_map<string, multiset<string>> mapping;
        for(string str : strs){ //利用具有相同元素的字符串排序后作为键,具有相同字符的字符串作为值
            string s = str;
            sort(s.begin(), s.end());
            mapping[s].insert(str);
        }
        
        vector<vector<string>> result;
        for(auto map : mapping){ //将拥有相同元素的字符串按照字符顺序排序,并存储进结果集中
            vector<string> anagram(map.second.begin(), map.second.end());
            result.push_back(anagram);
        }
        return result;
    }
};


LeetCode 49. Group Anagrams(分组同构异形词)

原题网址:https://leetcode.com/problems/anagrams/ Given an array of strings, group anagrams together. ...
  • jmspan
  • jmspan
  • 2016年05月21日 06:11
  • 623

2016蓝桥杯算法训练——Anagrams问题

算法训练   Anagrams问题 问题描述   Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的。例如,“Uncl...
  • qq_21385857
  • qq_21385857
  • 2016年03月16日 20:01
  • 1087

1501101124-蓝桥杯-算法训练 Anagrams问题

算法训练 Anagrams问题   时间限制:1.0s   内存限制:512.0MB      问题描述   Anagrams指的是具有如下特性的两个单词:在这两个单词...
  • wangluoershixiong
  • wangluoershixiong
  • 2015年01月10日 11:18
  • 1296

leedcode前50道题总结

1 2sum map结构存储每个数的下标,每遍历一个nums[i],找出map中target-nums[i]对应的下标,即返回i和该下标。 2 Add Two Numbers两个链表表示两个倒序的整...
  • cyy9203
  • cyy9203
  • 2017年08月08日 09:22
  • 142

49. 学习外语

学习外语         程序员需要交流,很多的交流。         程序员生涯中有一些时期,似乎大部分的交流都是同一台计算机;更精确地说,是运行程序的计算机。这种交流是为了把想法转换为一种机器...
  • aoelover
  • aoelover
  • 2013年10月15日 12:38
  • 381

UVA 156-Ananagrams(字符串排序按序输出无重复单词)

Ananagrams Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status ...
  • u013486414
  • u013486414
  • 2015年01月03日 15:46
  • 725

CareerCup之1.4判断字符串是否为变位词

【题目】 原文: 1.4 Write a method to decide if two strings are anagrams or not. 译文: 写一个函数判断两个字符串是否是变位词...
  • SunnyYoona
  • SunnyYoona
  • 2014年05月06日 16:13
  • 1371

【LeetCode】Anagrams 解题报告

【题目】 Given an array of strings, return all groups of strings that are anagrams. Note: All in...
  • ljiabin
  • ljiabin
  • 2014年12月02日 09:41
  • 2077

mysql中group by 的用法解析

group by 与非聚合字段同时使用的结论解析
  • kingszelda
  • kingszelda
  • 2017年05月22日 11:05
  • 2035

算法训练 Anagrams问题

题目: 问题描述   Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的。例如,“Unclear”和“Nuclear”...
  • lalalalalala_
  • lalalalalala_
  • 2017年04月05日 11:06
  • 157
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:49. Group Anagrams
举报原因:
原因补充:

(最多只允许输入30个字)