我不知道为什么我的代码不起作用。我试图按字典顺序对输入字符串的子字符串数组进行排序。然后得到最小和最大的元素。
例如:
输入:
s =票价&k = 2
子字符串数组将 = {fa,ar,re,es}
输出:
ar
重新
具有k
子字符串的大小。
我尝试使用3个元素的子字符串(k = 3)的“ helloworld”,但没有用。
public static String getSmallestAndLargest(String s, int k) {
String smallest = "";
String largest = "";
String[] str=new String[s.length()];
for(int i=0;i<s.length()-k;i++){
String holder=s.substring(i,i+k);
str[i]=holder;
}
Arrays.sort(str);
smallest=str[0];
largest=str[s.length()-1];
return smallest + "\n" + largest;
}
答案 0 :(得分:1)
问题在于str
的长度
例如,str
的值即s = fares并且k = 2为
[fa, ar, re, null, null]
因此Arrays.sort抛出异常
您也可以在同一循环中找到最大值和最小值,无需单独排序
我已经为相同的代码
public static void main(String[] args) throws Exception {
System.out.println(getSmallestAndLargest("fares",2));
}
public static String getSmallestAndLargest(String s, int k) {
String substring = s.substring(0, k);
String smallest = substring;
String largest = "";
while(s.length()>=k) {
String temp = s.substring(0, k);
System.out.println(temp);
smallest = smallest.compareTo(temp)<0?smallest:temp;
largest = largest.compareTo(temp)>0?largest:temp;
s= s.substring(1,s.length());
}
System.out.println("***************** Result");
return smallest+"\n"+largest;
}
输出
fa
ar
re
es
***************** Result
ar
re
带有K = 3
far
are
res
***************** Result
are
res
答案 1 :(得分:1)
问题在于子字符串数组的大小,您将其初始化为字符串的长度(此处为String[] str=new String[s.length()];
),这是错误的。这就是为什么您会得到Null异常的原因。
例如,对于s = fares和k = 2,您的数组大小为5,您将得到如下结果
[fa, ar, re, null, null]
数组的实际大小为s.length() - k -1
,因此您只需更改此值,并保留所有代码
public static String getSmallestAndLargest(String s, int k) {
String smallest = "";
String largest = "";
int length = s.length() - k +1;
String[] str=new String[length];
for(int i=0;i<=s.length() -k;i++){
String holder=s.substring(i,i+k);
str[i]=holder;
}
Arrays.sort(str);
smallest=str[0];
largest=str[length-1];
return smallest + "\n" + largest;
}