【问题标题】:lexicographical create largest and smallest substring字典式创建最大和最小的子串
【发布时间】:2020-02-24 00:54:37
【问题描述】:

问题陈述:

给定一个字符串 s 和一个整数 k,完成函数,以便找到长度为 k 的字典上最小和最大的子字符串。

代码:

public class Solution {

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

        for (int i = 1; i <= s.length() - k; i++) { //This line
            // Create a substring of length 'k'
            substring = s.substring(i, i + k);

            // If current substring is lexicographically smaller than 'smallest'
            if (substring.compareTo(smallest) < 0) {
                smallest = substring;
            }

            // If current substring is lexicographically larger than 'largest'
            if (substring.compareTo(largest) > 0) {
                largest = substring;
            }
        }

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

我无法理解代码中标记行的机制。有人可以向我解释吗?

【问题讨论】:

    标签: java string


    【解决方案1】:

    我猜你在谈论以下内容:

    for (int i = 1; i <= s.length() - k; i++) { //This line
    

    如果k 是所需的长度,那么您需要确保不迭代字符串effective length 以允许长度为k 的所有子字符串。减去k 只是调整终止点以实现该目标。

    这是一个例子。

    k = 5 and string length is 13.

    目标是迭代到8,这样9 thru 13 中的字符串长度为5。如果我们继续超出此范围,字符串将小于 5,并且可能会发生错误。

    尝试以下方法:

           String str = "abcdefghij";
           int k = 4;
    
           for (int i = 0; i <= str.length() - k; i++) {
               System.out.println(str.substring(i,i+k));
           }
    

    注意最后一个子字符串是ghij,这是期望的结果。

    【讨论】:

      【解决方案2】:

      for 循环中包含s.length() - k,因为每次循环迭代时我们都会创建一个新的子字符串。我们不希望子字符串的结尾超出传入字符串的范围,因此我们确保子字符串的开头不会超过s.length() - k

      【讨论】:

        猜你喜欢
        • 2020-07-20
        • 2017-08-09
        • 2016-05-19
        • 2021-05-01
        • 2014-06-25
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多