java - 为什么我们在 for 循环中做了 { i < s.length() - k } 请解释一下逻辑。给定字符串 s 和 int k
问题描述
这是字典最小和最大字符串的解决方案,其中我们有输入 Sting s 和 int k ;k 是所需的最小和最大字符串的长度。请浏览此链接问题,它是 statementhackerrank.com/challenges/java-string-compare/problem 我不需要任何更正。我想要的是对“for循环”的解释 i < s.length() - k 背后的逻辑是什么。它在第 4 行,它如何满足字典字符串的条件 –</p>
String smallest = s.substring(0, k); // Assume
String largest = s.substring(0, k);
String temp;
for(int i = 0; i < s.length() - k + 1;i++)<<<==== please Explain logic in this line
{
temp = s.substring(i, i + k);
if(smallest.compareTo(temp) > 0) smallest = temp;
if(largest.compareTo(temp) < 0) largest = temp;
}
return smallest + "\n" + largest;
}
链接:https ://www.hackerrank.com/challenges/java-string-compare/problem
解决方案
for(int i = 0; i < s.length() - k + 1;i++)
在这一行中,我们确保 'i' 不会超过字符串的长度,从而导致 IndexOutOfBounds 异常。
例如,在下面的代码片段中,请注意在 for 循环中,我们正在访问索引 i+1,因此 for 循环中的条件写为 'i < s.length()-1' 而不是 'i < s.length()' 通常是这种情况。
for(int i = 0; i < s.length() - 1; i++){
if(s.charAt(i+1) == s.charAt(i){
...
...
}
}
当 for 循环如下时,变量 'i' 从索引 0 移动到 s.length()-1:
for(int i = 0; i < s.length(); i++)
当 for 循环如下时,变量 'i' 将从索引 0 移动到 s.length()-k:
for(int i = 0; i < s.length()-k; i++)
但是由于我们使用的是 substring 函数,并且在该函数中,不包括结束索引,所以我们在 for 循环中添加 1:
for(int i = 0; i < s.length()-k+1; i++)
我希望我消除了你的疑虑。不要被这个冗长的解释吓倒,慢慢来理解我试图传达的内容。
推荐阅读
- r - 如何在过滤后的传播 dplyr 命令后检索原始数据帧
- c# - 使用 for 循环在战斗模拟中生成随机数作为伤害数
- json - JQ 递归树扩展
- android - 具有自定义 OTP 验证和本机功能的 Flutter 驱动程序 (Toast)
- c# - 如何使用我的类中的数据构建 C# 列表
- java - 无头环境的 awt 和 swing 替代方案
- c# - 过滤 DBSet、DBSet.AsQueryable() 或 DBSet.AsQueryable
() - pandas - 更改数据框的结构
- c - 使用 string.h 库在 C 语言中剪切字符串
- python - 如何在 Tensorflow 中使用 GPU?