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
原文:http://blog.csdn.net/hwb1992/article/details/24200521