字符串中刚好出现K个连续的‘O’,则把K个连续‘O’字符去除,返回处理后的字符串

比如 str="AOOOOOBOOO"   k=3, 返回“AOOOOOB”

这个题的解决思路也有很多

重要的是,关键的是,如何从左到右便利str时,将正好有连续的K个‘0’字符串都找到

解题思路步骤

1 生成两个变量。 int count 表示目前连续个‘O’的数量, 整型变量start,表示连续个‘O’出现的初始位置

2 从左到右 遍历str, 根据此处的内容cha做不同处理

3  如果cha是‘O’  然后看看 star = star==-1?i:start

4 如果char不是‘O’ 这是去掉'O'的时刻,要查看 count 等于 K不!是则删,不是则不删,最后令count=0 start=-1

  5 去‘O’的时刻是 不是‘O’的时候如果是以‘O’ 结尾的呢?! 考虑周全!需要判断 count是不是为K

废话不多说,代码贴上

package TT;

public class Test3 {

     public static String removeKZeros(String str, int k){

             if(str==null || k<1){
return str;
} char[] chas = str.toCharArray();
int count = 0, start =-1; for(int i=0; i!=chas.length; i++){
if(chas[i] =='O'){
count++;
start = start==-1 ? i : start; }else {
if(count == k){
while(count-- !=0){
chas[start++]=0;
}
}
count = 0;
start = -1;
}
} if(count == k){
while(count-- !=0){
chas[start++]=0;
}
}
return String.valueOf(chas);
} public static void main(String[] args){ String str = "AOOOOOBOOO";
int k = 3;
String str1= removeKZeros(str,k);
System.out.println(str1); } }

重点在这里:

public class Test5 {

     public static void main(String[] args) {
char[] x = {'A',0,0,0,'B'};
String xString = String.valueOf(x);
System.out.println(xString);
System.out.println(xString.charAt(1)==0);
} }

结果:

我又想了个递归版:

public class Test2 {
public static String getRemoveRetain(String str,int k) {
if (k<=0) {
return "不要乱搞";
}
String S ="";
String strTest = str;
for (int i = 0; i < k; i++) {
S+="O";
} int record = str.indexOf(S);
if (record == -1) {
return str;
}
else if ((record+k)>=str.length()) {
return str.substring(0,record);
}
else if ((str.charAt(record+k)=='O') || (str.charAt(record+k)=='O')) {
int j = record+k;
while (str.charAt(j) == 'O') {
j++;
}
return str.substring(0,j).concat(getRemoveRetain(str.substring(j), k));
}else if (str.charAt(record+k) !='O') {
String substring = str.substring(record+k);
return str.substring(0,record).concat(getRemoveRetain(substring, k));
}
return str;
} public static void main(String[] args) {
String s ="AOOOOOBOOOBOOO";
System.out.println(getRemoveRetain(s, 3));
}
}

写法有太多了:

public class t4 {

    public static String removeKo(String str, int k) {
if (str == null || k < 1) {
return str;
}
char[] chars = str.toCharArray();
int count = 0;
for (int i = 0 ; i< chars.length; i++){
if (chars[i] == '0'){
count++;
}
if(chars[i] != '0' && count == k){
int index = k;
int j = i-1;
while (index!=0 && ((i-1)>=0)){
chars[j] = 0;
index--;
j--;
}
//计算完毕要清空count
count=0;
}
if (chars[i] !='0' && count != k){
count=0;
}
}
//遍历完毕最后的判断
if (count == k){
int index = chars.length-1;
int sub = k;
//临界值为0时候已经不可以了 可以假设k为1的情况 预设
while (sub >0){
chars[index--]=0;
sub--;
}
}
return String.valueOf(chars);
}
public static void main(String[] args){
String str="A000B000";
String s = removeKo(str, 3);
System.out.println(s); }
}

字符串问题之 去掉字符串中连续出现K个0的子串的更多相关文章

  1. 《程序员代码面试指南》第五章 字符串问题 去掉字符串中连续出现k 个0 的子串

    题目 去掉字符串中连续出现k 个0 的子串 java代码 package com.lizhouwei.chapter5; /** * @Description: 去掉字符串中连续出现k 个0 的子串 ...

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

    去掉字符串中连续出现K个0的子串 给定一个字符串str,和一个整数k, 如果str中正好有连续K 个'0'字符出现,把连续的 k 个 '0'去掉,返回处理后的子串. [解题思路] 1. 定义两个变量, ...

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

    [题目] 给定一个字符串 str 和 一个整数 k, 如果 str 中正好有连续 k 个 ‘0’ 字符出现时,把 k 个连续的 ‘0’ 字符去除,返回处理后的字符串. [举例] str="A ...

  4. 给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换)

    需求:给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换) 如: a 不替换 b 不替换  ab 不替换 ba 不替换 aba 不替换  aab 替换为 ...

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

    题目: 给定一个字符串str和一个整数k,如果str中正好有k个‘0’字符出现时,把k个连续的‘0’字符去除,返回处理后的字符串. 举例: str=”A00B”,k=2,返回“AB” str=”A00 ...

  6. String的trim()用于去掉字符串前后的空格

    String的trim()可以去掉字符串的前导和后继字符串,即去掉字符串前面和后面的空格. eg:String userName = " good man "; System.ou ...

  7. 【PHP函数】PHP 去掉字符串中的转义符号

    PHP字符串中的转义符号 string stripslashes ( string $str ) //去掉字符串中的反斜线字符.若是连续二个反斜线,则去掉一个,留下一个.若只有一个反斜线,就直接去掉.

  8. C++去掉字符串中首尾空格和所有空格

    c++去掉首尾空格是参考一篇文章的,但是忘记文章出处了,就略过吧. 去掉首尾空格的代码如下: void trim(string &s) { if( !s.empty() ) { s.erase ...

  9. C# 使用正则表达式去掉字符串中的数字,或者去掉字符串中的非数字

            /// 去掉字符串中的数字           public static string RemoveNumber(string key)           {            ...

随机推荐

  1. azure iothub create-device-identity样例报错: unable to find valid certification path ,及iothub-explorer Error: CERT_UNTRUSTED

    https://docs.microsoft.com/zh-cn/azure/iot-hub/iot-hub-java-java-getstarted 在IDEA中执行上述的代码,会出现下面的报错信息 ...

  2. Java Modifier

  3. 玩点不同之CSS的BEM规范

    1.BEM引入背景 因为项目的业务逻辑发生重大变化,所以原来大半年的开发周期里做的事情基本上变成无用功.但是公司的项目上线时间依旧没有改变.剩下的时间只有区区的两个月,要做的功能是有社区+电商+核心业 ...

  4. 1280 前缀后缀集合(map)

    1280 前缀后缀集合 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 一个数组包含N个正整数,其中有些是重复的.一个前缀后缀集是满足 ...

  5. Oracle 物理体系

    Oracle  物理体系 Oracle 物理体系 问题 参考资料   Oracle 物理体系       PGA:program global area ,私有不共享内存. PGA起到预处理的作用: ...

  6. 阿里云服务器 进行zookeeper集群时候的肯!

    首先我本地虚拟机 部署过N次没什么问题! 擦,上了云就启动后不能正常节点之间连接和发现! 这上面有手误 擦,吧编号的2 打成22 了,这个看下日志就解决了 重点是zoo.conf 中的IP进行配置时候 ...

  7. coursera 《现代操作系统》 -- 第十三周 期末考试

    一些概念在书上不好找,可以通过谷歌搜索,比如搜索中断向量, site:coursera.org 中断向量   3  下列关于中断和异常的叙述中,哪一个是错误的? x86系列处理器提供的4个处理器特权级 ...

  8. css 生效顺序 less 写法

    <!DOCTYPE html><html><style type="text/css">.c{color:red;}.c{color:green ...

  9. [转载]H5项目常见问题汇总及解决方案

    本文转载自:http://www.open-open.com/lib/view/open1449325854077.html Meta基础知识: H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 / ...

  10. pip升级或卸载安装的包的方法

    先 pip list 看看包的具体名字是什么,然后 pip uninstall **包名** ===== 打印出有新版本的包: pip list --outdated --format=freeze ...