Leetcode_49_Anagrams
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/42744709
Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
思路:
(1)如果不知道anagrams的意思,很容易将题意理解错了。最开始我理解的意思是求给定字符串数组的全排列有多少种。OJ几次都错了,后来被迫查了下anagrams的意思才知道,anagrams:由颠倒字母顺序而构成的字[短语]。看来英语还是要学好啊。该题意为给定一个字符串数组,求得该数组中所有由相同字符组成的字符串序列。例如:给定字符串数组["abc","acb","cab","xyz","fg"],则结果为["abc","acb","cab"]。
(2)本文主要运用Map来存储,其中Key为经过排序后的字符串(通过对字符串进行排序,能够将顺序打乱的字符串变得相同),value为打乱顺序的一系列字符串。上例中key为"abc",value为["abc","acb","cab"]。然后通过判断Map中value对应List中元素个数是否大于1,如果大于1,说明有多个由相同字符组成但是顺序被打乱的字符串。
(3)详见下方代码。希望对你有所帮助。(PS:其中Arrays.sort()方法是对给定的数组进行排序)
算法代码实现如下:
/**
*
* @author liqq
*/
public static List<String> anagrams(String[] strs) {
if (strs == null || strs.length < 2)
return new ArrayList<String>();
Map<String, List<String>> maps = new HashMap<String, List<String>>();
for (String str : strs) {
char[] arr = str.toCharArray();
Arrays.sort(arr);
String key = new String(arr);
if (!maps.containsKey(key)) {
maps.put(key, new ArrayList<String>());
}
List<String> list = maps.get(key);
list.add(new String(str));
}
List<String> result = new ArrayList<String>();
for (Iterator<String> iterator = maps.keySet().iterator(); iterator
.hasNext();) {
String key = iterator.next();
if (maps.get(key).size() > 1) {
result.addAll(maps.get(key));
}
}
return result;
}
Leetcode_49_Anagrams的更多相关文章
随机推荐
- 编写高性能的Lua代码
编写高性能的Lua代码 Posted on2014/04/18· 10 Comments 前言 Lua是一门以其性能著称的脚本语言,被广泛应用在很多方面,尤其是游戏.像<魔兽世界>的插件, ...
- android MultiDex multidex原理下超出方法数的限制问题(三)
android MultiDex 原理下超出方法数的限制问题(三) 插件化?自动化?multiDex?是不是觉得已经懵逼了?请先看这篇文章的内容,在下篇文章中将会详解具体的过程- 随着应用不断迭 ...
- android自定义view实现progressbar的效果
一键清理是很多Launcher都会带有的功能,其效果也比较美观.实现方式也许有很多中,其中常见的是使用图片drawable来完成的,具体可以参考这篇文章:模仿实现360桌面水晶球式的一键清理特效.本文 ...
- (NO.00005)iOS实现炸弹人游戏(十一):怪物之火精灵
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 从本篇开始我们一次介绍一下游戏中敌人的制作过程.看过第一篇的小 ...
- 单幅图像的深度学习,对NYU数据集进行划分
针对分割问题,官方已经划分好了:http://cs.nyu.edu/~silberman/projects/indoor_scene_seg_sup.html import numpy as np i ...
- EBS开发技术之Patch安装
Contents Document Control........................................................................ ...
- 【一天一道LeetCode】#344. Reverse String
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Write a ...
- Java-IO之BufferedOutputStream(缓冲输出流)
BufferedOutputStream是缓冲输出流,继承于FilterOutputStream,作用是为另外一个输出流提供换从功能. 主要函数列表: BufferedOutputStream(Out ...
- J2EE学习从菜鸟变大鸟之四 JNDI(Java Naming and Directory Interface)
掌握 J2EE 是件不是很轻松的事哈,但是很有意思,抽象抽象哈哈,因为它包含的技术和缩略语在不断地增长.Java 命名和目录接口(Java Naming and Directory Interface ...
- 如何通过rsync+sersync 实现同步备份
3.rsync+sersync更快更节约资源实现web数据同步4.unison+inotify实现web数据双向同步 一:为什么要实现同步备份 服务器上有些重要文件或数据时,可以把他们多备份一份到其他 ...