【问题标题】:print the lexicographically smallest and largest substring of a given size k from a string s从字符串 s 打印给定大小 k 的字典最小和最大子字符串
【发布时间】:2020-07-20 21:24:23
【问题描述】:

它是一个打印大小为 k 的字典最小和最大子串的程序。

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

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

这是我没有得到的部分。为什么int i 初始化为k 以及如何

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

【问题讨论】:

    标签: java loops substring lexicographic


    【解决方案1】:

    算法的思想是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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-05
      • 2019-07-30
      • 2012-01-20
      • 1970-01-01
      • 2016-11-20
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多