字符串问题:去掉字符串中连续出现 k 个 0 的子串

题目

  给定一个字符串 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 }

原文地址:https://www.cnblogs.com/zlxyt/p/10531880.html

时间: 2024-07-31 12:35:44

字符串问题:去掉字符串中连续出现 k 个 0 的子串的相关文章

求一个字符串中连续出现的次数最多的子串

求一个字符串中连续出现的次数最多的子串.例如字符串“abababc”,最多连续出现的为ab,连续出现三次.要和求一个字符串中的最长重复子串区分开来,还是上面的字符串,那么最长的重复子串为abab.两个题目的解法有些类似,都用到了后缀数组这个数据结构.求一个字符串中连续出现的次数最多的子串,首先生成后缀数组例如上面的字符串为:abababcbababcababcbabcabcbcc可以看出第一个后缀数组和第三个后缀数组的起始都为ab,第5个后缀数组也为ab.可以看出规律来,一个字符串s,如果第一次

[算法]去掉字符串中连续出现的k个0子串

题目: 给定一个字符串str和一个整数k,如果str中正好有k个‘0’字符出现时,把k个连续的‘0’字符去除,返回处理后的字符串. 举例: str=”A00B”,k=2,返回“AB” str=”A0000B000”,k=3,返回“A0000B” 思路: 两个变量: 1.count表示连续0的个数,初始值为0 2.start表示连续0的起点,初始值为-1 使用字符串中从未出现的字符,这里使用’@‘,目的是最后一步进行正则替换 程序: public static String removeKZero

求一个字符串中连续出现次数最多的子串

解题思路 例如字符串"abababc",最多连续出现的为ab,连续出现三次.要和求一个字符串中的最长重复子串区分开来,还是上面的字符串,那么最长的重复子串为abab.两个题目的解法有些类似,都用到了后缀数组这个数据结构.求一个字符串中连续出现的次数最多的子串,首先生成后缀数组例如上面的字符串为: abababc bababc ababc babc abc bc c 可以看出第一个后缀数组和第三个后缀数组的起始都为ab,第5个后缀数组也为ab.可以看出规律来,一个字符串s,如果第一次出现

PAT 字符串-02 删除字符串中的子串

1 /* 2 2 *PAT 字符串-02 删除字符串中的子串 3 3 *2015-08-09 4 4 作者:flx413 5 5 */ 6 7 #include<stdio.h> 8 #include<string.h> 9 10 void fun(char *str, char *substr) { 11 int i, j, k, flag; 12 int len = strlen(substr); 13 14 while(strstr(str, substr)) { //如果字

后缀数组-连续出现的次数最多的子串

http://blog.csdn.net/ysu108/article/details/7795479 求一个字符串中连续出现的次数最多的子串.例如字符串“abababc”,最多连续出现的为ab,连续出现三次.要和求一个字符串中的最长重复子串区分开来,还是上面的字符串,那么最长的重复子串为abab.两个题目的解法有些类似,都用到了后缀数组这个数据结构.求一个字符串中连续出现的次数最多的子串,首先生成后缀数组例如上面的字符串为:abababcbababcababcbabcabcbcc可以看出第一个

字符串中连续出现最多的子串 &amp; 字符串中最长重复子串

字符串中连续出现最多的子串 & 字符串中最长重复子串 字符串中连续出现最多的子串 & 字符串中最长重复子串,这两个问题都可以用后缀数组来表示,至于后缀数组可以参考编程珠玑P156:后缀数组就是定义一个数组指针,分别指向字符串中的对应位置,如下: a b c a b c a b c d e .substr[0] b c a b c a b c d e ....substr[1] c a b c a b c d e .......substr[2] a b c a b c d e ......

将字符串中连续出现的重复字母进行压缩

原文地址:http://leihuang.net/2014/05/19/List-Interviews/ 单链表的一些常见面试题汇总 单链表反转/逆序 求单链表倒数第N个数 找到单链表的中间结点 如何判断链表是否有环的存在 单链表建环,无环链表变有环 如何知道环的长度? 如何找出环的连接点在哪里? 删除单链表中的重复元素 下面我先简单叙述一下每道题的思路,然后把实现的程序一起贴出来,不会讲得太细,我觉得只要有了思路之后,接下来的难点就是语言上的一些细节问题了,这个不自己去实现,听别人讲是体会不到

字符串中连续最多的子串

把字符串用后缀树的形式表现出来如下: a b c a b c a b c d e .substr[0] b c a b c a b c d e ....substr[1] c a b c a b c d e .......substr[2] a b c a b c d e ..........substr[3] b c a b c d e .............substr[4] c a b c d e ...............substr[5] a b c d e .........

17、如何对字符串进行左, 右, 居中对齐 18、如何去掉字符串中不需要的字符 19、如何读写文本文件 20、如何处理二进制文件 21、如何设置文件的缓冲

17.如何对字符串进行左, 右, 居中对齐 info = "GBK" print(info.ljust(20)) print(info.ljust(20,'#')) print(info.rjust(20,'#')) print(info.center(20,"#")) print(format(info,'<20')) print(format(info,'>20')) print(format(info,'^20')) result: GBK GBK