我有一个重复的字符串,或者可能是不重复的字符。现在,我必须编写一个以这样的方式返回字符串的程序:如果同一字符连续重复超过3次,则仅应返回3个连续字符。如果连续字符少于3个,则应全部返回。例如。
输入:“ aaaaaabbcccdeeeeeeeeeeeeffff” 预期输出:aaabbcccdeeefff
这里是我做的:
WHERE
输出是原始字符串。弄错了我哪里错了。
答案 0 :(得分:0)
您break
循环播放,并在点击counting
时停止3
。您需要确保“消耗”所有剩余的连续字母。我会打破逻辑。首先是一种计算连续出现次数的方法。喜欢,
private static int countConsecutive(char[] arr, int i) {
int count = 0;
for (int j = i; j < arr.length; j++) {
if (arr[j] == arr[i]) {
count++;
} else {
break;
}
}
return count;
}
然后,我们可以调用它来确定正确的count
(以及最少的三个和该数量来确定输出)。而且,相对于StringBuilder
,我更喜欢StringBuffer
。喜欢,
public static String stringCount(String str) {
char[] arr = str.toCharArray();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
int c = countConsecutive(arr, i);
int v = Math.min(3, c);
for (int j = 0; j < v; j++) {
sb.append(arr[i]);
}
i += (c - 1); // <-- not v, but the actual count!
}
return sb.toString();
}
答案 1 :(得分:0)
我鼓励您使用调试器并弄清楚代码出了什么问题。这是我想到的一个非常简单的解决方案。
public class StringCountUptoThree {
public static void main(String[] args) {
System.out.println(stringCount("aaaaaabbcccdeeeeeeeeeeffff", 3));
}
private static String stringCount(String str, int k) {
if(str.length() <= k) return str;
int start = 0, end = 1;
StringBuilder sb = new StringBuilder();
sb.append(str.charAt(start));
while(end < str.length()) {
char chStart = str.charAt(start);
char chEnd = str.charAt(end);
if(chStart != chEnd){
sb.append(chEnd);
start = end;
} else {
if(end - start < k)
sb.append(chEnd);
}
end++;
}
return sb.toString();
}
}
答案 2 :(得分:0)
一种聪明的方法是简单地使用regex
将您匹配的字母替换三倍
"aaaaaabbcccdeeeeeeeeffff".replaceAll("([a-z])\\1{2,}", "$1$1$1");
使用.
代替[a-z]
处理任何类型的字符
演示