zoukankan      html  css  js  c++  java
  • 字符串问题----去掉字符串中连续出现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);
        }
    
    }
  • 相关阅读:
    dell N5010
    centos7 teamviewer
    E40笔记本无线网卡
    sqlite的bool字段
    System.data.sqlite安装
    关于AutoResetEvent 和ManualResetEvent
    实时刷新winform中的某一个控件上的文字
    C#中的静态构造函数
    apm的学习资料
    C# 版本和.NET 版本以及VS版本的对应关系
  • 原文地址:https://www.cnblogs.com/Demrystv/p/9557610.html
Copyright © 2011-2022 走看看