Можем ли мы взять две строки из одной строки в операторе if? - PullRequest
2 голосов
/ 04 мая 2020

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

publi c Решение класса {

public static String getSmallestAndLargest(String s, int k) {
   String sequence = s.substring(0,k);
    String smallest = sequence;
    String largest = sequence;

    for(int i=0;i<=(s.length()-k); i++){

        sequence= s.substring(i,(i+k));

        if    (sequence.compareTo(smallest)<0){
            sequence=smallest;
        }
        if (sequence.compareTo(largest)>0){
            sequence=largest;
        }

            }
    // Complete the function
    // 'smallest' must be the lexicographically smallest substring of length 'k'
    // 'largest' must be the lexicographically largest substring of length 'k'

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

}

Ответы [ 2 ]

1 голос
/ 04 мая 2020
    if (sequence.compareTo(smallest)<0){
        smallest=sequence;
    }
    if (sequence.compareTo(largest)>0){
        largest=sequence;
    }

На языке Java назначение переменных производится следующим образом.

variable = value;
1 голос
/ 04 мая 2020
if(sequence.compareTo(smallest)<0){
    smallest = sequence;
}
if (sequence.compareTo(largest)>0){
    largest = sequence;
}

Вы сравниваете sequence с smallest и largest. И ваши sequence меняются в каждой итерации for loop. А внутри if condition вы проверяете, является ли ваш текущий sequence меньше / больше, чем ваши smallest и largest, и если это так, вам нужно обновить значения smallest и largest.

...