本文是在学习中的总结,欢迎转载但请注明出处: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的更多相关文章

随机推荐

  1. [Angular2]eclipse中angular2开发环境的搭建

    本文作者:苏生米沿 本文地址:http://blog.csdn.net/sushengmiyan 环境准备 1.eclipse neon 2.网络连接 插件地址 eclipse的插件市场地址: htt ...

  2. Android自定义View(LineBreakLayout-自动换行的标签容器)

      最近一段时间比较忙,都没有时间更新博客,今天公司的事情忙完得空,继续为我的自定义控件系列博客添砖加瓦.本篇博客讲解的是标签自动换行的布局容器,正好前一阵子有个项目中需要,想了想没什么难度就自己弄了 ...

  3. Latex 文本编辑技巧

    临时取消首行缩进 \noindent 生成随机文本 \usepackage{lipsum} \begin{document} \lipsum \end{document} 多栏模式 \usepacka ...

  4. eclipse properties 插件

    eclipse properties 插件安装,分享牛,分享牛原创.eclipse properties 编辑器使用. eclipse因为是原生的,可能集成的插件不多,需要自己手动安装.eclipse ...

  5. Leetcode解题-链表(2.2.1)AddTwoNumbers

    1 题目:2.2.1 Add Two Numbers You are given two linked lists representing two non-negative numbers. The ...

  6. Linux 高性能服务器编程——TCP协议详解

    问题聚焦:     本节从如下四个方面讨论TCP协议:     TCP头部信息:指定通信的源端端口号.目的端端口号.管理TCP连接,控制两个方向的数据流     TCP状态转移过程:TCP连接的任意一 ...

  7. Redis 学习笔记4: Redis 3.2.1 集群搭建

    在CenOS 6.7 linux环境下搭建Redis 集群环境 1.下载最新的Redis版本 本人下载的Redis版本是3.2.1版本,下载之后,解压,编译(make): 具体操作可以参考我的博文:R ...

  8. activiti 动态配置 activiti 监听引擎启动和初始化(高级源码篇)

    1.1.1. 前言 用户故事:现在有这样一个需求,第一个需求:公司的开发环境,测试环境以及线上环境,我们使用的数据库是不一样的,我们必须能够任意的切换数据库进行测试和发布,对数据库连接字符串我们需要加 ...

  9. Spring的DataSource配置、将Hibernate配置全部写到Spring配置

    DataSource可以集中管理数据库连接,减少维护工作量,使部署更简单: Spring的DataSource配置:(Spring数据源配置)这里使用dbcp,还有很多其他的如c3p0,jdbc,jn ...

  10. 4.0、Android Studio配置你的构建

    Android构建系统编译你的app资源和源码并且打包到APK中,你可以用来测试,部署,签名和发布.Android Studio使用Gradle,一个高级的构建套件,来自动化和管理构建进程,同时可以允 ...