gpt4 book ai didi

java - 数组中最大重复字符串

转载 作者:太空宇宙 更新时间:2023-11-04 10:30:10 25 4
gpt4 key购买 nike

问题是

how to get the maximum repeated String in an array using only operations on the arrays in java?

所以我在测试中遇到了这个问题,但无法弄清楚。假设我们有一个字符串数组。

str1[] = { "abbey", "bob", "caley", "caley", "zeeman", "abbey", "bob", "abbey" }
str2[] = { "abbey", "bob", "caley", "caley", "zeeman", "abbey", "bob", "abbey", "caley" }
  1. str1abbey重复次数最多,因此应该返回abbey并且
  2. str2 中,abbeycaley 都有相同的重复次数,因此我们将最大字母表作为获胜者并返回(这里是caley)。

    c>a

所以我尝试直到

import java.util.*;
public class test {
static String highestRepeated(String[] str) {
int n = str.length, num = 0;
String temp;
String str2[] = new String[n / 2];

for (int k = 0;k < n; k++) { // outer comparision
for (int l = k + 1; l < n; l++) { // inner comparision
if (str[k].equals(str[l])) {
// if matched, increase count
num++;
}
}
// I'm stuck here
}

return result;
}

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("enter how many votes");
int n = sc.nextInt();
String[] str = new String[n];
for (int i = 0; i < n; i++) {
Str[i] = sc.nextLine();

}
String res = highestRepeated(str);
System.out.println(res + " is the winner");
}
}

那么,我应该如何计算每个字符串的出现次数并将其与字符串本身附加在一起。

所有这一切,不使用映射和任何散列,而只是使用数组?

最佳答案

这是一个(未完善的)解决方案:

static String highestRepeated(String[] str) {
String[] sorted = Arrays.copyOf(str, str.length);
Arrays.sort(sorted, 0, sorted.length, Comparator.reverseOrder());
String currentString = sorted[0];
String bestString = sorted[0];
int maxCount = 1;
int currentCount = 1;
for (int i = 1 ; i < sorted.length ; i++) {
if (currentString.equals(sorted[i])) {
currentCount++;
} else {
if (maxCount < currentCount) {
maxCount = currentCount;
bestString = currentString;
}
currentString = sorted[i];
currentCount = 1;
}
}
if (currentCount > maxCount) {
return currentString;
}
return bestString;
}

说明:

按字典顺序从最高到最低对数组进行排序。这就是 Arrays.sort(sorted, 0,sorted.length, Comparator.reverseOrder()); 的作用。我们按此顺序排序,因为如果有多个重复次数相同的字符串,您需要最大的字符串。

现在我们可以通过循环数组来计算字符串的数量。我们不需要 HashMap 或任何东西,因为我们知道当我们遇到不同的字符串时,数组的其余部分将不再有字符串。

currentString 是我们当前使用 currentCount 计算重复次数的字符串。 maxCount 是我们当前统计的重复次数最多的字符串 - bestString 的出现次数。

if 语句非常不言自明:如果是相同的字符串,则对其进行计数,否则查看我们计数的前一个字符串 (currentCount) 出现的次数是否超过当前最大值。

最后,我检查最后计算的字符串是否超过最大值。如果数组中的最后一个字符串恰好是重复次数最多的字符串,则不会将 bestString 分配给它,因为仅当遇到不同字符串时才分配 bestString

请注意,该算法不处理空数组或只有一个元素数组等边缘情况。我相信您会自己弄清楚这一点。

关于java - 数组中最大重复字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50104597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com