首页 > 其他 > 详细

LeetCode|Anagrams

时间:2014-04-21 06:26:29      阅读:491      评论:0      收藏:0      [点我收藏+]

题目

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

Note: All inputs will be in lower-case.


思路

这个题目是判断所给的字符串数组中是否存在重复的颠倒字符串.

解决思路如下

首先为每个字符串排序   -->这个是用来判断是否存在重复的颠倒字符串

然后在为字符串数组排序  -->这个是用来使整个字符串数组都有序

这样下来就容易判断了

我用了一个 AnagramsNode 来保存当前字符串所在的位置,方便最后的输出

好了,题目解决

代码

class AnagramsNode implements Comparable<AnagramsNode>
{
	int index;
	String value;
	@Override
	public int compareTo(AnagramsNode o)
	{
		return value.compareTo(o.value);
	}
}
public class Solution {
    public ArrayList<String> anagrams(String[] strs) {
        ArrayList<String> result = new ArrayList<String>();
        ArrayList<AnagramsNode> node = new ArrayList<AnagramsNode>();

        for(int i =0; i <strs.length;i++)
        {
        	char[] temp = strs[i].toCharArray();
        	Arrays.sort(temp);
        	AnagramsNode anagramsNode = new AnagramsNode();
        	anagramsNode.index = i;
        	anagramsNode.value = String.copyValueOf(temp);
        	node.add(anagramsNode);
        }
        Collections.sort(node);
        for(int i = 0 ;i < strs.length; i++)
        {
        	AnagramsNode anagramsNode = node.get(i);
        	int j = i+1;
        	boolean flag = false;
        	for(;j<strs.length;j++)
        	{
        		if(node.get(j).value.equals(anagramsNode.value))
        		{
        			result.add(strs[node.get(j).index]);
        			flag = true;
        		}
        		else
        		{
        			j--;
        			break;
        		}
        		
        	}
        	if(flag == true)
        	{
        		i = j;
        		result.add(strs[anagramsNode.index]);
        	}
        }
        
        return result;
    }
}



LeetCode|Anagrams,布布扣,bubuko.com

LeetCode|Anagrams

原文:http://blog.csdn.net/hwb1992/article/details/24200521

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!