`
frank-liu
  • 浏览: 1667223 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

leetcode: Group Anagrams

 
阅读更多

问题描述:

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.

原问题链接:https://leetcode.com/problems/anagrams/

 

问题分析

  这个问题其实相对来说比较简单,因为它本身的要求是将一些包含相同字符的词组合在一起,并且是排序的。这里的难点在于第一步,怎么将这些包含有相同个数字符的词放在一起。因为它们由相同的字符集合构成,仅仅是因为排列的顺序不一样。

  其实这一类anagram的问题有一个固定的解决套路,虽然它们这些字符集构成的词有千变万化,但是既然是相同的词,我们将一个词里所有的字符首先排序得到一个字符串数组对于所有anagram来说就是一样的。所以我们可以将一个词里所有字符构成的串排序,然后将这个结果作为key,所有相同结果的词都放到同一个key下面。这样我们就可以很自然的想到用一个Map来解决问题。

  在详细的实现时,我们可以声明一个HashMap<String, List<String>>,key是根据一个字符串排序后得到的一个串,value是相同的anagram构成的列表。因为要求后面的结果是排序的,我们在后面将所有的value值都从Map里取出来的时候,先对value排一下序再加入到最终的列表中即得到最终的结果。详细实现如下:

 

public class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        List<List<String>> result = new ArrayList<>();
        Map<String, List<String>> map = new HashMap<>();
        for(String s : strs) {
            char[] chars = s.toCharArray();
            Arrays.sort(chars);
            String key = String.valueOf(chars);
            if(!map.containsKey(key)) map.put(key, new ArrayList<>());
            map.get(key).add(s);
        }
        for(String key : map.keySet()) {
            List<String> list = map.get(key);
            Collections.sort(list);
            result.add(list);
        }
        return result;
    }
}

 

分享到:
评论

相关推荐

    gasstationleetcode-Leetcode:力码

    加油站 ...Leetcode\group anagrams(49).swift Leetcode\group 给定他们所属的组大小的人(1282).swift Leetcode\数组中的第k 个最大元素(215).swift Leetcode\最长递增子序列(300).swift Leetcode\ma

    vscode提交leetcode-leetcode:最后...leetcode练习

    vscode提交leetcode 我的leetcode练习笔记 结构 代码在根路径中,每个cpp文件都是一个问题的解决方案 有关特定问题的解决方案的一些说明在目录中。 我使用的工具 我使用扩展来测试和调试本地并提交我确定我的解决...

    最大公共字符串leetcode-leetCode:leetcode

    groupAnagrams ( String [] strs ) { if (strs == null || strs . length == 0 ) return null ; Map&lt; String , List&lt; String &gt; &gt; map = new HashMap&lt; String , List&lt; String &gt; &gt; (); Arrays . sort(strs...

    dna匹配leetcode-leetcode:leetcode刷题

    Anagrams 排序 unordered_map Minimum Window Substring 两个指针遍历 map Maximal Rectangle 栈 局部递增 或者 动态规划 Binary Tree Inorder Traversal 栈 递归 Single Number 异或 Copy List with Random Pointer...

    leetcode2sumc-LeetCode:这个存储库是为了保存我对LeetCode的解决方案(https://leetcode.com/p

    leetcode 2 和 c 力码 运行时统计: 前 0-20% : 9 次前 20-40% : 3 次前 40-60% : 4 次前 60-80% : 2 次前 80-100% : 16 次总计:接受 ...groupAnagrams ( self , strs : List [ str ]) -&gt; List [ List

    扩展矩阵leetcode-leetcode:力码练习

    给定字符串数组,实现groupAnagrams(strs)将字谜合并在一起并将其作为数组返回 解决方案:实现基于字母计数的散列算法,因此字谜将返回相同的散列。 遍历字符串,获取它们的散列并将它们添加到存储在字典中的字谜组...

    leetcode中国-quiz:每周小测

    groupAnagrams : 给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。 题目参考: 实现版本: 题解参考: week 2 removeHexPrefix : 去除16进制的前缀,并转换为小写 实现版本: ...

    LeetCode最全代码

    # [LeetCode](https://leetcode.com/problemset/algorithms/) ![Language](https://img.shields.io/badge/language-Python%20%2F%20C++%2011-orange.svg) [![License]...

    leetcode算法分组-javascript_algorithms:各种算法在Javascript中的实现

    Group Anagrams - 识别和分组 Anagrams,使用正则表达式和循环解决(来自 LeetCode ) 唯一路径 - 动态规划问题,使用蛮力解决,然后使用自上而下的方法加速(来自 LeetCode ) 排序颜色 - 排序挑战,首先使用计数...

    vscode安装leetcode-leetcode-js-tdd:LeetCode勇士的简单样板

    vscode安装leetcode leetcode-js-tdd leetcode 勇士的简单样板 如何使用 克隆这个 repo 在你的 vscode 中安装 配置扩展以使用 repo ...使用1.two-sum.js案例导出解决方案 ...参见49.group-anagrams.js

    lrucacheleetcode-leetcode-practice:Leetcode-练习

    Anagrams-排序,Hashmap Medium 合并 K 个排序列表 - 优先队列困难 最小路径和中等 二叉树右侧视图(DFS和BFS)中 岛屿数量 - BFS、联合和查找媒介 子集 - 位操作介质 K 最近点到原点 - 堆 有效的二叉搜索树中 BST:...

    lrucacheleetcode-Leetcode-Solutions-CSharp:该存储库将包含C#中许多Leetcode问题的解决方案

    lru缓存leetcode ...Anagrams - Leetcode 40 (Medium) 用交易费买卖股票的最佳时机 - Leetcode 714 (Medium) 保持城市天际线的最大增加 - Leetcode 807(中) 有效括号 - Leetcode 20 (Easy) 重新格式化日期

    lrucacheleetcode-LeetCode_30Day:力扣30天挑战赛

    lru缓存leetcode 力扣_30天 力扣 30 天挑战赛 日 问题描述 问题和解决方案链接 Git 解决方案页面 1 SINGLE NUMBER 2 HAPPY NUMBER 3 MAXIMUM SUBARRAY 4 Move Zeroes 5 Best Time to Buy and Sell Stock II 6 GROUP ...

    leetcode2-code_interview:LeetCodeLintCode题解,剑指offer题目,互联网公司面试,BAT外企等面试题

    compare-string和group string都是同型题目 int79-LCS lintcode上的79题 寻找最长公共字串 lintcode 138-Subarray-Sum integer-arr 整型数组 值得回顾的题 41-first-missing-positive 01-Two-Sum 求解第K

    程序员面试金典 – 面试题 10.02. 变位词组(哈希map)

    1. 题目 编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。...链接:https://leetcode-cn.com/problems/group-anagrams-lcci 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明

    cpp-算法精粹

    AlgoHub囊括了 POJ, ZOJ, leetcode, HackerRank 等网站的经典题目(一些质量不高的题目则忽略),且 AlgoHub有非常简单的加题系统,用户不需要写一行代码即可自己添加题目,所以AlgoHub的题库还在飞速增长中。...

Global site tag (gtag.js) - Google Analytics