Сортировать массив в лексикографическом порядке - PullRequest
0 голосов
/ 20 апреля 2020

Я не знаю, почему мой код не работает. Я пытаюсь отсортировать в лексикографическом порядке массив подстрок входной строки. и затем получите самый маленький и самый большой элемент.
пример:

Ввод :
s = тарифы & k = 2
массив подстрок будет = {fa, ar, re, es}
Выход :
ar
re

с k размер подстроки.

Я пробовал "helloworld" с подстрокой из 3 элементов (k = 3) и не работал.

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 ]

1 голос
/ 20 апреля 2020

проблема в размере массива подстрок, который вы инициализируете его длиной строки (здесь String[] str=new String[s.length()];), что неправильно. вот почему вы получите Null Exception.

, например, для s = тарифы и 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;
}
1 голос
/ 20 апреля 2020

Проблема заключается в длине str значения str для примера, т. Е. S = тарифы и k = 2 равны

[fa, ar, re, null, null]

, следовательно, исключение выбрасывания Arrays.sort Также вы можете найти максимальное и минимальное в одном и том же l oop, нет необходимости в отдельной сортировке
Я сделал код для того же

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

output

fa
ar
re
es
***************** Result
ar
re

с помощью K = 3

far
are
res
***************** Result
are
res
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...