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