博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 49 - Group Anagram 归类同构字
阅读量:5329 次
发布时间:2019-06-14

本文共 1179 字,大约阅读时间需要 3 分钟。

原题:

 

题意简介:给定一个字符串数组,找里面的同构字 (包含相同字母,并且相同的字母个数也相同,比如 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
> groupAnagrams(String[] strs) { List
> res = new ArrayList
>(); if (strs == null || strs.length == 0) return res; Map
> map = new HashMap
>(); 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
()); map.get(key).add(s); } return new ArrayList
>(map.values()); }}

  

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

你可能感兴趣的文章
2012年最佳30款免费 WordPress 主题
查看>>
在Silverlight中使用HierarchicalDataTemplate为TreeView实现递归树状结构
查看>>
HDU-1150 Machine Schedule 二分图匹配
查看>>
单例模式的5种写法
查看>>
安卓问题报告小记(四):Some projects cannot be imported because they already exist in the workspace...
查看>>
显示地图
查看>>
无线通信基础(一):无线网络演进
查看>>
如何在工作中快速成长?阿里资深架构师给工程师的10个简单技巧
查看>>
WebSocket 时时双向数据,前后端(聊天室)
查看>>
关于cocoa 运行时runtime
查看>>
关于python中带下划线的变量和函数 的意义
查看>>
asp.net 写入excel时,不能更新。数据库或对象为只读。
查看>>
linux清空日志文件内容 (转)
查看>>
jsp中对jstl一些标签的引用方式
查看>>
mkdir命令(转)
查看>>
安卓第十三天笔记-服务(Service)
查看>>
css3学习笔记之背景
查看>>
Servlet接收JSP参数乱码问题解决办法
查看>>
【bzoj5016】[Snoi2017]一个简单的询问 莫队算法
查看>>
[dpdk] 熟悉SDK与初步使用 (二)(skeleton源码分析)
查看>>