原题:

题意简介:给定一个字符串数组,找里面的同构字 (包含相同字母,并且相同的字母个数也相同,比如 abc 和 cab, cba,acb,bac,bca 互为同构字,但是abc 和 aabc 就不是同构字)。归类好同构字之后,就把护卫同构字的单词以 List 的形式输出出来,所以我们的result 应该是 List<List<String>>。

解题思路:

1. 根据同构字的特性,针对互为同构字的每一个单词进行排序之后,这些单词就会变成同一个单词。例如 cab, cba, bca, bac, acb,每一个单词排序之后,都会变成 abc。

2. 所以根据这个特性,我们可以把输入的字符串数组的每一个单词进行排序,排序后结构相同的单词就归类在一起,通过这种方式完成归类。

3. 通过 步骤1 和步骤2 的分析,我们自然想到了使用HashMap 作为归类存储的数据结构,key:同构字排序后的结果,value:结构相同的单词,以List的方式存储。

4. 所以,整个过程应该是:对输入数组的每个单词进行排序,排序好之后,去HashMap 内查找是否已经有这个同构字存在,如果有,就把这个单词放入其对应的key 所 map 到的value List 里面;如果没有这个同构字,则把排好序的单词作为key 放入HashMap 中。如此进行循环,直到遍历完整个输入数组。最后,我们将Map 中的 value 全部输出,即为结果。

AC 代码

class Solution {public List<List<String>> groupAnagrams(String[] strs) {List<List<String>> res = new ArrayList<List<String>>();if (strs == null || strs.length == 0) return res;Map<String, List<String>> map = new HashMap<String, List<String>>();for (String s : strs) {char[] c = s.toCharArray();Arrays.sort(c);String key = String.valueOf(c);if (!map.containsKey(key)) map.put(key, new ArrayList<String>());map.get(key).add(s);}return new ArrayList<List<String>>(map.values());}
}

  

转载于:https://www.cnblogs.com/skysmemory/p/10687346.html

LeetCode 49 - Group Anagram 归类同构字相关推荐

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

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

  2. [swift] LeetCode 49. Group Anagrams

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

  3. LeetCode 49. Group Anagrams

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

  4. 49.Group Anagrams

    49.Group Anagrams 题目描述:Given an array of strings, group anagrams together. For example, given: [&quo ...

  5. 【LeetCode】49. Group Anagrams

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

  6. LeetCode(49)Anagram

    题目如下: Given an array of strings, return all groups of strings that are anagrams. Note: All inputs wi ...

  7. LeetCode 49. 字母异位词分组 Group Anagrams

    给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "tan&quo ...

  8. leetcode 49. 字母异位词分组

    49. 字母异位词分组 - 力扣(LeetCode) 一开始想的是把各个字符串中每个字符ascii码值相加,然后相同的ascii码值放在一个组,在相同的ascii码值组中再去细找字母异位词. 一开始算 ...

  9. 49 Group Anagrams

    题目链接:https://leetcode.com/problems/anagrams/ 题目: Given an array of strings, group anagrams together. ...

  10. [LeetCode]: 242: Valid Anagram

    题目: Given two strings s and t, write a function to determine if t is an anagram of s. For example, s ...

最新文章

  1. 关于windows对话框
  2. RHEL 5基础篇—了解系统的引导过程
  3. linux添加审计账户_眼镜蛇W眼镜蛇白盒品白源代码审计工具 白帽子版
  4. matlab文件读写监听,matlab对文件的读写
  5. Vim高手,从来不用鼠标
  6. C语言经典算法100例-037-给10个数排序
  7. php中的static
  8. LeetCode 933.最近的请求次数
  9. tensorflow 旋转图片_使用TensorFlow对图像进行随机旋转的实现示例
  10. 如何在python导入包_python如何引入包
  11. python_ 学习笔记(基础语法)
  12. 去宇宙条面试被问:HashMap 为什么线程不安全?
  13. IBM之alphablox + tomcat 安装小记
  14. 分享几种设为首页的代码
  15. 如何安装 btsync
  16. 何为编码 GBK 和 UTF8编码?GBK,GB2312与区位码有何关系?
  17. 《全网搜索》6.1版 - 更新内容及下载链接
  18. html把字母a显示为其asc码,HTML ASCII码
  19. CDA数据分析师考察内容包括哪些
  20. 深读源码-java同步系列简介

热门文章

  1. java新增mysql时 中文出现_Java项目往数据库中插入数据,出现中文乱码
  2. arcgis制作空间变化图怎么做_Arcgis专题地图的编制
  3. 1074 Reversing Linked List (25 分)
  4. Java数据结构:稀疏数组(Sparse Array)的创建和文件存取
  5. django(三):配置文件settings.py、初始化数据库
  6. java 解析 xml中的冒号_Java jdom解析xml文件带冒号的属性
  7. java ssh jar_java应用程序远程登录linux并执行其命令(ssh jar包)
  8. C/C++[codeup 1907]吃糖果
  9. 翻译:神经网络 为什么要通过减去数据集的图像均值来标准化图像,而不是深度学习中的当前图像均值?
  10. php禁言时间开发,一起来捉妖禁言时间介绍_教程一览