按字典顺序对数组进行排序

时间:2020-04-20 10:41:49

标签: java sorting substring

我不知道为什么我的代码不起作用。我试图按字典顺序对输入字符串的子字符串数组进行排序。然后得到最小和最大的元素。
例如:

输入
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;
}

2 个答案:

答案 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;
}
相关问题