Java 做一个;条纹“;柜台
我正在创建一个接受字母数组“H”或“T”的方法。我需要返回一个int,它表示“H”或“T”的最长条纹(更长) 输出:3,因为一行中有3个“H” 以下是我到目前为止的情况:Java 做一个;条纹“;柜台,java,Java,我正在创建一个接受字母数组“H”或“T”的方法。我需要返回一个int,它表示“H”或“T”的最长条纹(更长) 输出:3,因为一行中有3个“H” 以下是我到目前为止的情况: public int streak(String[] arr) { int hCount = 0; int tCount = 0; for (int i = 0; i < arr.length - 1; i++) { if (arr[i].equals("H") &&
public int streak(String[] arr) {
int hCount = 0;
int tCount = 0;
for (int i = 0; i < arr.length - 1; i++) {
if (arr[i].equals("H") && !arr[i + 1].equals("T")) {
hCount++;
}
if (arr[i].equals("T") && !arr[i + 1].equals("H")) {
tCount++;
}
}
return Math.max(hCount, tCount);
}
我不允许更改方法参数。建议
最简单的方法是在符合第一个
计数器的条件时重置第二个
计数器
因此,当字母==“T”只需增加TT计数
并重置hCount
,
但是当字母==“H”只需增加计数并重置计数
这是最简单、最清晰的解决方案,没有任何附加条件。您又添加了一个计数器maxLength
,这就是
此外,此解决方案还可以修改以处理更多的字母
代码
方法中的条件,您可以修改,如下所述:
if (letter.equals("T")) {
tCount++;
hCount = 0;
} else if (letter.equals("H")) {
hCount++;
tCount = 0;
}
在每个循环结束时,您可以检查哪个计数器的值最大:
maxLength = Math.max(maxLength, Math.max(hCount, tCount));
全解
提议
最简单的方法是在符合第一个
计数器的条件时重置第二个
计数器
因此,当字母==“T”只需增加TT计数
并重置hCount
,
但是当字母==“H”只需增加计数并重置计数
这是最简单、最清晰的解决方案,没有任何附加条件。您又添加了一个计数器maxLength
,这就是
此外,此解决方案还可以修改以处理更多的字母
代码
方法中的条件,您可以修改,如下所述:
if (letter.equals("T")) {
tCount++;
hCount = 0;
} else if (letter.equals("H")) {
hCount++;
tCount = 0;
}
在每个循环结束时,您可以检查哪个计数器的值最大:
maxLength = Math.max(maxLength, Math.max(hCount, tCount));
全解
一旦“条纹”结束,您应该重置tCount和hCount。尝试使用布尔标志检查您当前是否处于“T”条纹或“H”条纹中。一旦“条纹”结束,您应该重置tCount和hCount。尝试使用布尔标志检查当前是处于“T”条纹还是“H”条纹
public int streak(String[] arr) {
int maxLength = 0;
int hCount = 0;
int tCount = 0;
for (String letter : arr) {
if (letter.equals("T")) {
tCount++;
hCount = 0;
} else if (letter.equals("H")) {
hCount++;
tCount = 0;
}
maxLength = Math.max(maxLength, Math.max(hCount, tCount));
}
return maxLength;
}