java - 为什么“最小”不返回任何东西?
问题描述
您好,所以我目前正在通过 HackerRank 上的 Java 挑战,遇到了一个我无法用我的代码解决的问题。
提示如下,
给定一个字符串 s 和一个整数 k,完成函数,以便它找到长度为 k 的字典上最小和最大的子字符串。
示例输入:
welcometojava
3
样本输出:
ava
wel
最小和最大子串完全基于第一个整数。因此,对于我的解决方案,我决定创建一个整数数组并用 String 中可用的每个字符的整数值填充它。
我想一旦我对数组进行排序, index[0] 将等于 minimum 的第一个字母,而 index[s.length()-1] 将等于 maximum 的第一个字母。从那里开始,只要最小/最大<= 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));
}
解决方案
我想一旦我对数组进行排序,
index[0]
将等于最小的第一个字母,而index[s.length() - 1]
将等于最大的第一个字母。
嗯,是的……但这还不够。问题是最小的字母可以在原始字符串中出现多次。最大的字母也是如此。因此,当您在原始字符串中找到 (say) 的一个实例时'a'
,您不知道它是否是最小的 3 字符子字符串的开头。
有一种更简单的方法。
提示:如果你有一个由 3 个字符串组成的数组,你如何找到最小的和最大的?
推荐阅读
- ajax - Primefaces 按钮设置文本字段
- haskell - Haskell:从字符串中提取整数
- database - Hibernate:ManyToOne 生成字段 raw(255)
- python - Python Dash 调整烛台大小
- css - 在 Jquery DataTable 中使用图标更改默认按钮不起作用
- c - 将动态分配的内存释放给两个指针
- python - 熊猫中列的异常值公式
- r - 将 R 列表中的数据帧导出到 .mat 文件中(使用 R 的 R.matlab 包)
- memory-leaks - log4j2 AsyncAppender 发生内存泄漏
- javascript - 计算器按键