Leetcode_49_Anagrams
来源:互联网 发布:数据统计要学数学吗 编辑:程序博客网 时间:2024/06/16 16:50
本文是在学习中的总结,欢迎转载但请注明出处: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;}
3 0
- Leetcode_49_Anagrams
- solr客户端程序开发
- Jquery Ajax 获取submit表单的结果
- 奇异值分解SVD原理探讨
- 解决office Word2007无法粘贴问题
- Java中Json字符串直接转换为对象(包括多层List集合)
- Leetcode_49_Anagrams
- mac下熟悉MD5加密、AES-128-CBC加密解密字符串追加base64.。
- QQ聊天记录丢了怎么恢复
- Android Universal Image Loader 架构剖析
- Coreldraw绘制珍珠项链送给你
- 正则表达式验证内容
- jQuery-ujs——让request method中的put、delete也可以动作
- 从01背包问题理解动态规划(看过最简单易懂的版本)
- Mac安装UltraEdit破解版