gpt4 book ai didi

java - 为什么 "smallest"不返回任何内容?

转载 作者:行者123 更新时间:2023-12-02 11:13:55 26 4
gpt4 key购买 nike

您好,我目前正在参加 HackerRank 上的 Java 挑战赛,并遇到了一个我无法用我的代码解决的问题。

提示如下,

给定一个字符串 s 和一个整数 k,完成该函数,以便找到长度为 k 的字典顺序最小和最大子字符串。

示例输入:
welcometojava
3

示例输出:
ava
wel

最小和最大的子串仅基于第一个整数。因此,对于我的解决方案,我决定创建一个整数数组,并用 String 中每个可用字符的整数值填充它。

我认为一旦对数组进行排序,索引[0]将等于最小的第一个字母,而索引[s.length()-1]将等于最大的第一个字母。从那里开始,只需将数组中的每个后续字符连接到相应的最小/最大字符,只要最小/最大 <= k 即可。

通过上面的示例输入,我可以返回最大的“wel”。然而最小的是返回一个空字符串,我不明白为什么。我实际上遵循相同的方法来获取两个字符串的值,因此我认为最小的应该返回一个字符串值,无论该值是否是正确的答案。

下面是我的源代码。

public static String getSmallestAndLargest(String s, int k) {
String smallest = "";
String largest = "";

int[] temp = new int[s.length()];

for (int i = 0; i < s.length(); i++) {
temp[i] = (int) s.charAt(i);
}

Arrays.sort(temp);

char[] charArray = s.toCharArray();

// find smallest string
for (int i = 0; i < charArray.length; i++) {

if ((int) s.charAt(i) == temp[0]) {

while (i < k) {
smallest += String.valueOf(s.charAt(i));
i++;
}
}
}

// find largest string
for (int i = 0; i < charArray.length; i++) {

if ((int) s.charAt(i) == temp[s.length()-1]) {

while (i < k) {
largest += String.valueOf(s.charAt(i));
i++;
}
}
}

return smallest + "\n" + largest;
}

public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.next();
int k = scan.nextInt();
scan.close();

System.out.println(getSmallestAndLargest(s, k));
}

最佳答案

I figured once I sorted the array, index[0] would equal the first letter of smallest while index[s.length() - 1] would equal the first letter of largest.

是的……但这还不够。问题是最小的字母可以在原始字符串中出现多次。最大的字母也可以。因此,当您在原始字符串中找到(例如)'a' 的实例时,您不知道它是否是最小的 3 字符子字符串的开头。

有一个更简单的方法。

提示:如果你有一个包含 3 个字符串的数组,如何找到最小和最大的字符串?

关于java - 为什么 "smallest"不返回任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50421461/

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