英文:
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;
}
英文:
Its a program to print the Lexicographically smallest and largest substring of size k.
There´s a part in this solution I don´t really understand. Maybe someone can explain it to me.
public static String getSmallestAndLargest(String s, int k) {
String smallest = "";
String largest = "";
String currStr = s.substring(0, k);
Here is the part I dont get. why is int i
initialised with k
and how does
for(int i = k; i<s.length(); i++){
currStr = currStr.substring(1, k) + s.charAt(i);
exactly work?
Full loop:
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;
}
答案1
得分: 0
算法的思想是 currStr
遍历所有长度为 k
的子字符串。它从索引 0 到索引 k-1 的子字符串开始:
String currStr = s.substring(0, k); // 结束索引被排除在外!
然后要获取下一个子字符串,从索引 1 到 k:
-
首先,它去掉了
currStr
的第一个字符,这样你就得到了一个从索引 1 到索引 k-1 的子字符串。 -
然后,它添加了输入字符串索引
k
处的字符。最终结果是从索引 1 到索引 k 的子字符串。
然后,这个过程会重复,以获取从索引 2 到 k+1 的子字符串以及所有后续的子字符串。
currStr = currStr.substring(1, k) // 从 currStr 中去掉第一个字符
+ s.charAt(i); // 添加输入字符串的下一个字符
英文:
The idea of the algorithm that currStr
goes through all substrings of length k
. It starts with substring from index 0 to index k-1:
String currStr = s.substring(0, k); // end index is excluded!
Then to get the next substring, the one from index 1 to k:
-
First it drops the first character from
currStr
, so you get a substring from index 1 to index k-1. -
Then it adds the character from index
k
from the input string. The end result is the substring from index 1 to index k.
This process is then repeated to get the substring from index 2 to k+1 and all the following substrings.
currStr = currStr.substring(1, k) // drop the first character from currStr
+ s.charAt(i); // add next character from input string
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论