码迷,mamicode.com
首页 > 编程语言 > 详细

[LeetCode][Java] Anagrams

时间:2015-07-14 22:41:56      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:leetcode   java   anagrams   

题目:

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

Note: All inputs will be in lower-case.

题意:

给定一个字符串数组,返回所有的易位构词组合。

注意:所有的输入都是小写。


算法分析:

易位构词其实也很好理解,就是两个单词所包含的字符和数量都是一样的,只是顺序不同

对字符串中各字母进行排序,那么互为重排列的字符串就会相等。

按照上述思路,用一个map纪录按字母排序后的字符串及其出现位置(或原字符串),在遍历过程中,如果遇到排序后的字符串相等的,就说明两者互为重排列。

第一次出现的重排列字符串需要特殊照顾下,下述代码中用-1标识第一次出现的重排列字符串是否已经加入结果。

此外,对字符串按字母排序的方法可以用Java类库的char数组排序;也可以利用题目所说的字符串中只含有小写字母这一信息,进行计数排序


AC代码:

	  public ArrayList<String> anagrams(String[] strs) 
	  {
		    ArrayList<String> list = new ArrayList<String>();
		    HashMap<String, Integer> map = new HashMap<String, Integer>();
		    
		    for (int i = 0; i < strs.length; ++i) 
		    {
		      char[] chars = strs[i].toCharArray();
		      
		      Arrays.sort(chars);
		      
		      String anagram = new String(chars);
		      
		      if (map.containsKey(anagram)) 
		      {
		        int index = map.get(anagram);
		        if (index != -1)
		        {
		          list.add(strs[index]);
		          map.put(anagram, -1);//用-1标识第一次出现的重排列字符串
		        }
		        list.add(strs[i]);
		      } 
		      else 
		        map.put(anagram, i);
	
		    }
		    return list;
	   }


版权声明:本文为博主原创文章,转载注明出处

[LeetCode][Java] Anagrams

标签:leetcode   java   anagrams   

原文地址:http://blog.csdn.net/evan123mg/article/details/46883085

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!