我需要我的代码的更新版本,它可以返回字符串中连续重复字符的最大数量,例如在我们将字符串"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;
}
答案 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());