当前位置: 首页 > 知识库问答 >
问题:

按字典顺序创建最大和最小的子串

李成礼
2023-03-14

问题陈述:

给定一个字符串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));
    }
}

我不明白代码中标记线的机制。有人能给我解释一下吗?

共有2个答案

贡正诚
2023-03-14

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

李昱
2023-03-14

我想你说的是以下内容:

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

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

这里有一个例子。

< code>k = 5,字符串长度为13。

目标是迭代到 8,以便从 9 到 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,这是所需的结果。

 类似资料:
  • 我在寻找字典上最小的字符串的排列数。 例如,< code>bbaa现在,字典上最小的字符串是< code>aabb,因此,排列是, < code>(1,2,3,4),(2,1,3,4),(1,2,4,3),(2,1,4,3)也就是4。 我对它的想法(在python中)是找到最小的字符串(基本上将其排序为字符串),然后创建一个计数器来存储每个字符的计数。 因为,我们不需要一个在字典上变得更大的字符串

  • 问题内容: 我有在另一个主题上找到的这段代码,但是该代码按连续字符而不是字母顺序对子字符串进行排序。如何按字母顺序更正?它打印出来了,我想打印。谢谢 ps:我是python的初学者 问题答案: 尝试更改此: 对此: 这将显示您的示例输入字符串。代码更简单,因为您正试图解决一个更简单的问题:-)

  • 本文向大家介绍字符串中最大和最小的单词-JavaScript,包括了字符串中最大和最小的单词-JavaScript的使用技巧和注意事项,需要的朋友参考一下 我们需要编写一个JavaScript函数,该函数接受字符串并返回一个带有两个字符串值的数组,它们应分别是字符串中最小和最大的单词。 例如- 如果字符串是- 那么输出应该是- 因此,让我们为该功能编写代码 示例 以下是代码- 输出结果 控制台中的

  • 我想从数组的一部分找到最大值和最小值。我知道我可以通过复制数组将所需的数组部分复制到另一个数组中,但只是想知道是否可以不复制数组,因为我必须为不同的子数组进行循环 例如: 现在我想从1到4找到子数组的最小/最大值(如果可能,不复制子数组)

  • 问题内容: 有没有一种方法可以限制Django Haystack索引中边缘ngram的大小?例如,我创建ngram如下: 但我不想创建2个字母ngram,实际上我想将最小设置为4或5。 作为背景,我使用的是django-haystack / elasticsearch,并在heroku上使用了盆景。 问题答案: 您需要做的是覆盖Haystack的ElasticSearch后端中的搜索映射。 简而言

  • 问题内容: 我被分配编写一个程序,该程序读取一系列整数输入并打印-输入的最小和最大-以及偶数和奇数输入的数量 我想出了第一部分,但对如何使程序显示最大和最小感到困惑。到目前为止,这是我的代码。我怎样才能显示最小的输入呢? 问题答案: 最简单的解决方案是使用诸如和