LeetCode|Anagrams

题目

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;
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值