0

文字列内の連続する重複文字の最大数を返すことができるコードの更新バージョンが必要です。たとえば、入力として文字列がある場合、 5 c があるため"aabbbcccccd"結果は 5 になります

私のコードの問題は、それが4を返すことです。

入力 " abccbbb" がある場合、文字列には 3 つの連続した重複文字 (c) が含まれているため、結果は 4 ではなく 3 になることに注意してください。

private int countRepeatedChars(String password)
{
    int maxNumberofRepeatedChars = 0;
    int counterOfSameChar = 0;
    boolean foundMoreThanOneChar = false;

    char ch, nextCh;
    for (int i = 0; i < password.length()-1; i++) 
    {
        ch = password.charAt(i);
        nextCh = password.charAt(i + 1);
        if ((int) ch == ((int) nextCh)) 
        {
            counterOfSameChar++;
        } else 
        {
            maxNumberofRepeatedChars = Math.max(counterOfSameChar, maxNumberofRepeatedChars);
            counterOfSameChar = 0;
            foundMoreThanOneChar = true;
        }
    }

    if (foundMoreThanOneChar)
        return maxNumberofRepeatedChars;
    else
        return counterOfSameChar;
}
4

5 に答える 5

4

あなたのコードは問題ありませんが、重複する文字数の答えは でありcounterOfSameChar+1、 ではありませんcounterOfSameChar。これは、連続する同一文字を探すためです。つまり、「cc」は 1、「ccc」は 2 と数えます。

于 2013-06-07T08:31:25.697 に答える
3

次の文字が最初の文字と同じ場合、counterOfSameChar を増やします。これが最初に発生したときは、すでに 2 回目の発生ですが、これを 1 に設定します。1 で counterOfSameChar を開始する必要があります。

于 2013-06-07T08:31:42.590 に答える
2

可能な限り短いコード?

private int countRepeatedChars(String password) {
    int countMax = 0;
    int count = 1;
    int pos = 1;

    if(password != null && password.length() > 1)
    {
        for(pos = 1;pos < password.length();pos++)
        {
            if(password.charAt(pos) == password.charAt(pos - 1))
            {
                count++;
            }
            else
            {
                count = 1;
            }

            if(count > countMax)
            {
                countMax = count;
            }
        }
    }
    else if(password != null)
    {
        countMax = 1;
    }

    return countMax;
}
于 2013-06-07T08:40:39.630 に答える
0

正しい答えを与える文字のペアを数えます...

重複した文字を数えるには、単一の文字を数える必要があります。

ch = password.charAt(i);
prevCh = password.charAt(i - 1);
nextCh = password.charAt(i + 1);
if (ch == nextCh || ch == prevCh) {

String(最初と最後の文字)の境界内にいることも確認してください。

于 2013-06-07T08:31:31.607 に答える