`
huntfor
  • 浏览: 195186 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

[leetcode]Anagrams

 
阅读更多

新博文地址:[leetcode]Anagrams

Anagrams

Given an array of strings, return all groups of strings that are anagrams.

Note: All inputs will be in lower-case.

 这道题我没看懂啥意思,看了解释之后才知道是从给定的数组中挑出互为anagram的单词,这道题曾经在编程珠玑上看到过,因此没多做考虑就直接开始编码了

具体算法思想是:

对每个单词做出标记,例如对于anagram标记为a3g1m1n1r1,表示这个单词有3个a,1个g等等。

第一遍遍历数组就将所有的单词做出来标记,接下来只需要对比标记即可。

为了优化时间复杂度,在第一遍遍历时,顺便把所有具有相同标记的单词全都丢在了同一个list中。

因此时间复杂度为O(n)

具体代码如下:

public List<String> anagrams(String[] strs) {
		List<String> result = new ArrayList<String>(); 
		Map<String,List<String>> map = new HashMap<String,List<String>>();
		if(strs == null || strs.length == 1){
			return result;
		}
		for(String s : strs){
			String seq = getSequence(s);
			if(map.containsKey(seq)){
				map.get(seq).add(s);
			}else{
				List<String> list = new ArrayList<String>();
				list.add(s);
				map.put(seq, list);
			}
		}
		for(Map.Entry<String, List<String>> entry : map.entrySet()){
			if(entry.getValue().size() > 1){
				for(String s : entry.getValue()){
					result.add(s);
				}
			}
		}
		return result;
    }	
	private String getSequence(String s){
		if("".equals(s)){
			return "";
		}
		int[] hash = new int[256];
		StringBuilder sb = new StringBuilder();
		for(int i = 0; i < s.length(); i++){
			hash[s.charAt(i)]++;
		}
		for(int i = 97; i < 123; i++){
			if(hash[i] != 0){
				sb.append((char)i).append(hash[i]);
			}
		}
		return sb.toString();
	}

 第一遍做的时候少考虑了空字符串,实在不应该

分享到:
评论

相关推荐

    LeetCode最全代码

    # [LeetCode](https://leetcode.com/problemset/algorithms/) ![Language](https://img.shields.io/badge/language-Python%20%2F%20C++%2011-orange.svg) [![License]...

    leetcode分类-leetcode:leetcode

    Anagrams in a String Pattern: two points 双指针是这样的模式:两个指针朝着左右方向移动(双指针分为同向双指针和异向双指针),直到他们有一个或是两个都满足某种条件。 使用双指针的优势:若只用一个指针,需多...

    leetcode双人赛-leetcode-1:leetcode-1

    Anagrams :简单的#hashtable问题。 BalancedBinaryTree :简单的#balance #tree问题。 BestTimetoBuyandSellStock :简单的问题。 BestTimetoBuyandSellStockII :简单的问题。 BestTimetoBuyandSellStockIII : ...

    最大公共字符串leetcode-leetCode:leetcode

    groupAnagrams ( String [] strs ) { if (strs == null || strs . length == 0 ) return null ; Map&lt; String , List&lt; String &gt; &gt; map = new HashMap&lt; String , List&lt; String &gt; &gt; (); Arrays . sort(strs...

    vscode安装leetcode-leetcode-js-tdd:LeetCode勇士的简单样板

    vscode安装leetcode leetcode-js-tdd leetcode 勇士的简单样板 如何使用 克隆这个 repo 在你的 vscode 中安装 配置扩展以使用 repo ...使用1.two-sum.js案例导出解决方案 ...参见49.group-anagrams.js

    vscode提交leetcode-leetcode:最后...leetcode练习

    vscode提交leetcode 我的leetcode练习笔记 结构 代码在根路径中,每个cpp文件都是一个问题的解决方案 有关特定问题的解决方案的一些说明在目录中。 我使用的工具 我使用扩展来测试和调试本地并提交我确定我的解决...

    gasstationleetcode-Leetcode:力码

    加油站 leetcode 力码 ...anagrams(49).swift Leetcode\group 给定他们所属的组大小的人(1282).swift Leetcode\数组中的第k 个最大元素(215).swift Leetcode\最长递增子序列(300).swift Leetcode\ma

    leetcode438-LeetCode438_Find_All_Anagrams_in_String:438题目:给定一个字符串s和一个非空

    LeetCode438_Find_All_Anagrams_in_String 438题目:给定一个字符串s和一个非空字符串p,字符串全部由小写字母子组成。 在S中找出所有p对应的anagrams(颠倒)字符串的子串,返回这些子串的起始索引 如s="cbaebabacd...

    leetcode算法分组-javascript_algorithms:各种算法在Javascript中的实现

    leetcode 性能javascript_algorithms Javascript 中各种算法的实现。 所有问题都有单元测试覆盖。 为什么是 JavaScript? 它是我目前最强大的语言,考虑到 V8 取得的令人印象深刻的进步,我认为 Javascript 拥有美好...

    lrucacheleetcode-Leetcode-Solutions-CSharp:该存储库将包含C#中许多Leetcode问题的解决方案

    lru缓存leetcode ...Anagrams - Leetcode 40 (Medium) 用交易费买卖股票的最佳时机 - Leetcode 714 (Medium) 保持城市天际线的最大增加 - Leetcode 807(中) 有效括号 - Leetcode 20 (Easy) 重新格式化日期

    leetcode中国-leetcode:leetcode刷题

    leetcode中国 我自己的leetcode刷题记录 ###[20150920] Valid Palindrome Implement strStr() ...Anagrams 字符串处理,map Simplify Path,字符串处理,stack Length of Last Word,字符串处理.细节题 Rever

    dna匹配leetcode-leetcode:leetcode刷题

    Anagrams 排序 unordered_map Minimum Window Substring 两个指针遍历 map Maximal Rectangle 栈 局部递增 或者 动态规划 Binary Tree Inorder Traversal 栈 递归 Single Number 异或 Copy List with Random Pointer...

    颜色分类leetcode-leetcode.etc:OJ、leetcode等解决方案

    颜色分类leetcode leetcode.etc My solutions of the problems in Online judge website, leetcode, lintcode, etc. leetcode: 13 problems solved lintcode: 49 problems ...Anagrams(比较字符串) E

    anagrams_starter

    字谜应用 此应用程序是在名为Android的Applied CS的研讨会中开发的基本文字游戏。 字谜是通过重新排列另一个单词的字母而形成的单词。 例如,电影是冰人的七巧板。

    leetcode2sumc-LeetCode:这个存储库是为了保存我对LeetCode的解决方案(https://leetcode.com/p

    leetcode 2 和 c 力码 运行时统计: 前 0-20% : 9 次前 20-40% : 3 次前 40-60% : 4 次前 60-80% : 2 次前 80-100% : 16 次总计:接受 33 个问题 问题: 49. 组字谜 中等的 给定一个字符串数组,将字谜组合在一起。 ...

    Leetcode:更大的LeetcodeLösungen

    49组Anagrams视频讲解50 Pow(x,n)视频讲解51 N-Queens视频讲解52 N-Queens II视频讲解53最大子数组视频讲解54螺旋矩阵视频讲解55跳转游戏视频讲解56合并间隔视频讲解57插入间隔视频讲解59螺旋矩

    扩展矩阵leetcode-leetcode:力码练习

    给定字符串数组,实现groupAnagrams(strs)将字谜合并在一起并将其作为数组返回 解决方案:实现基于字母计数的散列算法,因此字谜将返回相同的散列。 遍历字符串,获取它们的散列并将它们添加到存储在字典中的字谜组...

    lrucacheleetcode-leetcode-practice:Leetcode-练习

    Anagrams-排序,Hashmap Medium 合并 K 个排序列表 - 优先队列困难 最小路径和中等 二叉树右侧视图(DFS和BFS)中 岛屿数量 - BFS、联合和查找媒介 子集 - 位操作介质 K 最近点到原点 - 堆 有效的二叉搜索树中 BST:...

    LeetCode:我针对LeetCode提出的算法问题的解决方案

    LeetCode 检查! 解决的问题 1.两和( :star: )[ ] 2.加两个数字[ ] 3.最长的子字符串,不包含重复字符( :star: )[ ] 5.最长回文子串( :star: )[ ] 17.电话号码的字母组合[ ] 20.有效括号[ ] 21.合并两个...

    leetcode2-code_interview:LeetCodeLintCode题解,剑指offer题目,互联网公司面试,BAT外企等面试题

    anagrams 两个乱序字符串的比较 lint55 compare-string和group string都是同型题目 int79-LCS lintcode上的79题 寻找最长公共字串 lintcode 138-Subarray-Sum integer-arr 整型数组 值得回顾的题 41-first-missing-...

Global site tag (gtag.js) - Google Analytics