问题描述:给定一个字符串,去掉字符串中连续出现k次的0;例如:100001 K=3;得到101。
解一:如果K是常量,这题就非常简单,相当于删除字符串中指定的子串。可以用子串为参照进行切割。然后再将分割后的字符串进行链接起来。下面以删除子串“000”为例。
代码如下:
public class 去掉连续K次出现的0 {
public static void main(String[] args){
String str = "10000001001";
System.out.println(f(str));
}
private static String f(String str) {
String arr[] = str.split("000");
StringBuilder sb = new StringBuilder();
for(int i=0; i<arr.length; i++){
sb.append(arr[i]);
}
return sb.toString();
}
}
解法二:如果K的变量就需要遍历字符串,然后进行统计,遇到连续出现3次的0就跳过。
代码如下:
public class 去掉连续K次出现的0 {
public static void main(String[] args){
String str = "10000010010000";
System.out.println(f(str, 3));
}
private static String f(String str, int k) {
char[] arr = str.toCharArray();
StringBuilder sb = new StringBuilder();
int count = 0;
for(int i=0; i<arr.length; i++){
if(arr[i] == '0'){
count++;
if(count==k){
count=0;
}
}else{
for(int j=0; j<count%k; j++){
sb.append('0');
}
sb.append(arr[i]);
count = 0;
}
}
//防止字符串最后面是连续几个出现的0
for(int j=0; j<count%k; j++){
sb.append('0');
}
return sb.toString();
}
}