查找字符串中连续重复字符的最大数量

时间:2013-06-07 08:26:05

标签: java string

我需要我的代码的更新版本,它可以返回字符串中连续重复字符的最大数量,例如在我们将字符串"aabbbcccccd"作为输入的情况下 然后结果应为5,因为我们有5 c

我的代码存在的问题是它会返回 4

请注意,在我们输入“abccbbb”的情况下,结果应为3而不是4,因为字符串包含3个连续的重复字符(c)。 < / p>

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;
}

5 个答案:

答案 0 :(得分:4)

您的代码很好,但重复字符数的答案是counterOfSameChar+1,而不是counterOfSameChar。这是因为它查找连续的相同字符,因此“cc”计数1,“ccc”计数2等。

答案 1 :(得分:3)

当下一个字符与第一个字符相同时,增加counterOfSameChar。第一次发生这种情况时,您将其设置为1,尽管它已经是第二次出现。你应该用1来启动counterOfSameChar。

答案 2 :(得分:1)

最短的代码?

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;
}

答案 3 :(得分:0)

你计算得到正确答案的对os字符......

要计算重复的字符,您需要计算单个字符,例如:

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

请同时检查您是否在String(第一个和最后一个字符)的范围内。

答案 4 :(得分:0)

    Pattern pattern = Pattern.compile("(?<=(.))(?!\\1)");
    String[] count = pattern.split(test,0);
    for(String str : count){
        runningString.append("("+str.length()+")"+str.charAt(0));
    }       
    System.out.println(runningString.toString());