【发布时间】:2018-07-19 19:54:53
【问题描述】:
我被要求在一个列表中找到最大的字谜组。我相信我必须在另一个循环内有一个累积循环,以跟踪最大数量的项目。问题是我不知道如何计算每个字谜有多少。我已经能够根据它们的字谜对数组进行分组。所以从索引 1-3 是一个字谜,4-10 是另一个,等等。我如何搜索并计算我有多少个字谜?然后将每个与之前的计数进行比较。
代码示例:
public static String[] getLargestAnagramGroup(String[] inputArray) {
ArrayList<String> largestGroupArrayList = new ArrayList<String>();
if (inputArray.length == 0 || inputArray == null) {
return new String[0];
}
insertionSort(inputArray, new AnagramComparator());
String[] largestGroupArray = new String[largestGroupArrayList.size()];
largestGroupArrayList.toArray(inputArray);
System.out.println(largestGroupArray);
return largestGroupArray;
}
更新:我们就是这样解决的。有没有更有效的方法?
public static String[] getLargestAnagramGroup(String[] inputArray) {
int numberOfAnagrams = 0;
int temporary = 1;
int position = -1;
int index = 0;
if (inputArray == null) {
return new String[0];
}
insertionSort(inputArray, new AnagramComparator());
for (index = 0; index < inputArray.length - 1; index++) {
if (areAnagrams(inputArray[index], inputArray[index + 1])) {
temporary++;
} else {
if (temporary > numberOfAnagrams) {
numberOfAnagrams = temporary;
position = index;
temporary = 1;
} else if (temporary < numberOfAnagrams) {
temporary = 1;
}
}
}
if (temporary > numberOfAnagrams) {
position = index;
numberOfAnagrams = temporary;
}
String[] largestArray = new String[numberOfAnagrams];
for (int startIndex = position - numberOfAnagrams + 1, i = 0; startIndex <= position; startIndex++, i++) {
largestArray[i] = inputArray[startIndex];
}
return largestArray;
}
【问题讨论】:
-
AnagramComparator 是做什么的?
-
@NewUser AnagramComparator 比较 2 个索引并告诉我它们是否是字谜。在 InsertionSort 方法中使用它来对列表进行排序,其中所有字谜组彼此相邻。