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

Posted Demrystv

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串问题----去掉字符串中连续出现K个0的子串相关的知识,希望对你有一定的参考价值。

去掉字符串中连续出现K个0的子串

  

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

 

  【解题思路】

  1. 定义两个变量,count表示‘0‘连续出现的次数,start表示连续出现的开始位置,

  2. 将去掉连续0 的时机放在了当前字符不是 0 的情况

  3. 因此对于最后可能以 0 结尾,这时没有去掉,因此最后应该对count进行进行检查是否等于k

  其时间复杂度是O(N),空间复杂度是 O(1)

package com.test;

/**
 * Created by Demrystv.
 */
public class removeKZeros {

    public String removeKZeros(String str, int k){
        if (str == null || k < 1){
            return str;
        }

        char[] chars = str.toCharArray();
        int start = -1;
        int count = 0;
        for (int i = 0; i < chars.length; i++) {

            //首先当前字符是0
            if (chars[i] == ‘0‘){
                count++;
                start = start == -1 ? i : start;
            }else {
                //当前字符不是0,数量已经到了k,进行移除操作
                if (count == k){
                    while (count-- != 0){
                        chars[start++] = 0; //这个0 不是字符‘0‘,字符‘0‘的阿西克码是48, 这个0 的阿西克码就是0,‘A00B‘-->‘A  B‘再转换成字符串就是‘AB‘
                    }
                }
                //当前字符不是0,数量不是k,说明是其他字符
                count = 0;
                start = -1;
            }
        }

        //对于最后以 0 结尾的,需要再次进行判断,因为我们判断数量是否到达k 是在当前元素不是 0 的情况
        if (count == k){
            while (count-- != 0){
                chars[start++] = 0;
            }
        }
        return String.valueOf(chars);
    }

}

 

以上是关于字符串问题----去掉字符串中连续出现K个0的子串的主要内容,如果未能解决你的问题,请参考以下文章

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

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

找出字符串中连续出现次数最多的子串

找出字符串中连续出现次数最多的子串

bzoj3473字符串&bzoj3277串

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