首页 > 技术文章 > 字符串问题:去掉字符串中连续出现 k 个 0 的子串

zlxyt 2019-03-14 17:49 原文

题目

  给定一个字符串 str 和 一个整数 k, 如果 str 中正好有连续 k 个 ‘0’ 字符出现时,把 k 个连续的 ‘0’ 字符去除,返回处理后的字符串。

举例

  str="A00B", k=2, 返回 “A  B”

  str="A0000B000", k=3, 返回 “A0000B”

难度

  一星

解答

 1 public class Main {
 2 
 3     public static void main(String[] args) {
 4         System.out.println(new Main().removeKZeros("A00B", 2));//A  B
 5         System.out.println(new Main().removeKZeros("A0000B000", 3));//A0000B
 6     }
 7     
 8     public String removeKZeros(String str, int k){
 9         if(str == null || k < 1) return str;
10         char[] chs = str.toCharArray();
11         int count = 0;  //统计连续出现字符'0'的次数
12         int start = -1; //记录开始出现字符'0'的位置
13         for(int i = 0, len = chs.length; i < len; i++){
14             char ch = chs[i];
15             if(ch == '0'){
16                 count++;
17                 start = start == -1 ? i : start;
18             }else{ //若遇到非'0'字符
19                 if(count == k){//表示出现连续 k 个 '0', 将字符 '0' 设置为空字符
20                     while(count-- > 0){
21                         chs[start++] = 0; //设置为空字符, ascii 码中 0 表示空字符(Null)
22                     }
23                 }
24                 //重新统计
25                 count = 0;
26                 start = -1;
27             }
28         }
29         //判断结尾是否出现 k 个 0' 字符
30         if(count == k){
31             while(count-- > 0){
32                 chs[start++] = 0;
33             }
34         }
35         
36         return String.valueOf(chs);
37     }
38     
39 }

 

推荐阅读