Java 做一个;条纹“;柜台

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") &&

我正在创建一个接受字母数组“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") && !arr[i + 1].equals("T")) {
            hCount++;
        }
        if (arr[i].equals("T") && !arr[i + 1].equals("H")) {
            tCount++;
        }
    }
    return Math.max(hCount, tCount);
}
我不允许更改方法参数。

建议 最简单的方法是在符合
第一个
计数器的条件时重置
第二个
计数器

因此,当字母==“T”只需增加T
T计数
并重置
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”只需增加T
T计数
并重置
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;
}