按字典顺序对字符串排序

时间:2018-07-23 14:17:31

标签: java string sorting lexicographic

该问题提供了一个输入字符串和一个整数,它要求我们将字符串转换为所提供的输入整数所指定的所有长度的子字符串组合。 然后,我们必须从这些子字符串中找到最大值和最小值。

我找到了解决问题的方法,但是任何人都可以解释循环部分。 解决方案:

import java.io.*;`
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        int k = sc.nextInt();
        String maxString = s.substring(0, k);
        String minString = s.substring(0, k);

        for (int i = 1; i <= s.length() - k; ++i){
            if (maxString.compareTo(s.substring(i, i + k)) < 0)
                maxString = s.substring(i, i + k);
            if (minString.compareTo(s.substring(i, i + k)) > 0)
                minString = s.substring(i, i + k);
        }

        System.out.println(minString);
        System.out.println(maxString);
    }
}

1 个答案:

答案 0 :(得分:0)

这两个substring将开始

  

String maxString = S.substring(0,k); //从索引0开始

     

String minString = S.substring(0,k);

在循环for (int i=1;i<=S.length()-k;++i)中,我们从index=1开始,直到最后一个可能的索引S.length()-k,该索引仍然可以为我们提供长度为k的子字符串。

我们从索引0(初始化部分)一直循环到最后一个索引S.length() - k(在循环中,最后一次迭代):

  1. 如果substring较大,我们将更新maxString = S.substring(i,i+k);
  2. 如果小于minString,我们将进行更新minString = S.substring(i,i+k);

就像Lino和jingx提到的那样,我将您的代码重构如下:

public static void main(String... args) {
    Scanner sc = new Scanner(System.in);
    String s = sc.next();
    int k = sc.nextInt();
    String maxString = s.substring(0, k);
    String minString = s.substring(0, k);

    for (int i = 1; i <= s.length() - k; ++i){
        String curSubstr = s.substring(i, i + k);
        System.out.println(curSubstr);
        if (maxString.compareTo(curSubstr) < 0)
            maxString = s.substring(i, i + k);
        if (minString.compareTo(curSubstr) > 0)
            minString = s.substring(i, i + k);
    }

    System.out.println(minString);
    System.out.println(maxString);
}

进行如下本地测试:

Case #1
Input: 
HelloWorld 
2
Output:
el
ll
lo
oW
Wo
or
rl
ld
He // the min
rl // the max