面试题:乱序字符串
2015-08-29 12:14
447 查看
难度:中等
给出一个字符串数组S,找到其中所有的乱序字符串(Anagram)。如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中。
样例
对于字符串数组 ["lint","intl","inlt","code"]
返回 ["lint","inlt","intl"]
注意
所有的字符串都只包含小写字母
答案:
给出一个字符串数组S,找到其中所有的乱序字符串(Anagram)。如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中。
样例
对于字符串数组 ["lint","intl","inlt","code"]
返回 ["lint","inlt","intl"]
注意
所有的字符串都只包含小写字母
答案:
public class Solution { /** * @param strs: A list of strings * @return: A list of strings */ public List<String> anagrams(String[] strs) { ArrayList<String> result = new ArrayList<String>(); HashMap<Integer, ArrayList<String>> map = new HashMap<Integer, ArrayList<String>>(); for (String str : strs) { int[] count = new int[26]; for (int i = 0; i < str.length(); i++) { count[str.charAt(i) - 'a']++; } int hash = getHash(count); if (!map.containsKey(hash)) { map.put(hash, new ArrayList<String>()); } map.get(hash).add(str); } for (ArrayList<String> tmp : map.values()) { if (tmp.size() > 1) { result.addAll(tmp); } } return result; } private int getHash(int[] count) { int hash = 0; int a = 378551; int b = 63689; for (int num : count) { hash = hash * a + num; a = a * b; } return hash; } }
相关文章推荐
- 2014腾讯、百度、阿里面试经验
- 黑马程序员 File&Properties&URL
- 黑马程序员 --- NSString和NSMutableString的用法
- mybatis常见的面试题
- 关于线程的面试题
- 剑指offer-第六章面试中的各项能力(数字在排序数组中出现的次数)
- 腾讯面试题
- 《剑指Offer》面试题:找到第一个只出现一次的字符
- 程序员面试金典1.5:实现字符串的压缩功能
- 《程序员思维训练》读书小记
- 面试题25.二叉树中和为某一值的路径
- 知识点总结: Java 面试宝典 2013版(超长版) - Java Web 部分
- 面试题24.二叉搜索树的后序遍历序列
- 黑马程序员_集合框架(三)
- 每天5道面试题(六)java基础
- 程序员的七年之痒(个人五年职业规划)
- 黑马程序员-----Java基础-----反射
- 为什么面试总喜欢考算法题?
- 黑马程序员——Java基础之IO流
- 黑马程序员——java基础 反射 (复习)