打印字符串 s 中给定大小 k 的字典序最小和最大子字符串
print the lexicographically smallest and largest substring of a given size k from a string s
这是一个打印字典序最小和最大的大小为 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;
}
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
这是一个打印字典序最小和最大的大小为 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;
}
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