java - 从字符串 s 中打印给定大小 k 的字典顺序最小和最大子字符串

标签 java loops substring lexicographic

它是一个程序,用于打印按字典顺序排列的最小和最大的大小为 k 的子字符串。

这个解决方案中有一部分我不太明白。也许有人可以向我解释一下。

 public static String getSmallestAndLargest(String s, int k) {
    String smallest = "";
    String largest = "";
    String currStr = s.substring(0, k); 
<小时/>

这是我不明白的部分。为什么int ik初始化以及如何

for(int i = k; i<s.length(); i++){
    currStr = currStr.substring(1, k) + s.charAt(i);

确实有效吗?

<小时/>

全循环:

    for(int i = k; i<s.length(); i++){
        currStr = currStr.substring(1, k) + s.charAt(i); 
        if (lexMax.compareTo(currStr) < 0)      
             lexMax = currStr; 
        if (lexMin.compareTo(currStr) > 0) 
             lexMin = currStr;             
    }       
    return smallest + "\n" + largest;
}

最佳答案

算法的思想是currStr遍历所有长度为k的子字符串。它以从索引 0 到索引 k-1 的子字符串开头:

String currStr = s.substring(0, k); // end index is excluded!

然后获取下一个子字符串,即从索引 1 到 k 的子字符串:

  • 首先,它会删除 currStr 中的第一个字符,因此您将获得从索引 1 到索引 k-1 的子字符串。

  • 然后它从输入字符串中添加索引 k 中的字符。最终结果是从索引1到索引k的子串。

然后重复此过程以获取从索引 2 到 k+1 的子字符串以及所有后续子字符串。

currStr = currStr.substring(1, k) // drop the first character from currStr
             + s.charAt(i);       // add next character from input string

关于java - 从字符串 s 中打印给定大小 k 的字典顺序最小和最大子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61101148/

相关文章:

java - 如何向 Realm SyncUser 添加额外信息

java - UML 图中的私有(private)嵌套 Java 类

r - 每 "X"秒保存一次循环的输出

java - 如何在 100 多个现有类中创建新的类变量?

java - JSON嵌套类数据绑定(bind)

javascript - 在javascript中的for循环中添加总和

c++ - 在这种情况下如何正确释放内存

c - 简单的 C 子串实现

asp.net - 子字符串的多个长度?

php - 反转字符串中所有字母序列的方向