字符串问题之 去掉字符串中连续出现K个0的子串
字符串中刚好出现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的子串的更多相关文章
- 《程序员代码面试指南》第五章 字符串问题 去掉字符串中连续出现k 个0 的子串
题目 去掉字符串中连续出现k 个0 的子串 java代码 package com.lizhouwei.chapter5; /** * @Description: 去掉字符串中连续出现k 个0 的子串 ...
- 字符串问题----去掉字符串中连续出现K个0的子串
去掉字符串中连续出现K个0的子串 给定一个字符串str,和一个整数k, 如果str中正好有连续K 个'0'字符出现,把连续的 k 个 '0'去掉,返回处理后的子串. [解题思路] 1. 定义两个变量, ...
- 字符串问题:去掉字符串中连续出现 k 个 0 的子串
[题目] 给定一个字符串 str 和 一个整数 k, 如果 str 中正好有连续 k 个 ‘0’ 字符出现时,把 k 个连续的 ‘0’ 字符去除,返回处理后的字符串. [举例] str="A ...
- 给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换)
需求:给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换) 如: a 不替换 b 不替换 ab 不替换 ba 不替换 aba 不替换 aab 替换为 ...
- [算法]去掉字符串中连续出现的k个0子串
题目: 给定一个字符串str和一个整数k,如果str中正好有k个‘0’字符出现时,把k个连续的‘0’字符去除,返回处理后的字符串. 举例: str=”A00B”,k=2,返回“AB” str=”A00 ...
- String的trim()用于去掉字符串前后的空格
String的trim()可以去掉字符串的前导和后继字符串,即去掉字符串前面和后面的空格. eg:String userName = " good man "; System.ou ...
- 【PHP函数】PHP 去掉字符串中的转义符号
PHP字符串中的转义符号 string stripslashes ( string $str ) //去掉字符串中的反斜线字符.若是连续二个反斜线,则去掉一个,留下一个.若只有一个反斜线,就直接去掉.
- C++去掉字符串中首尾空格和所有空格
c++去掉首尾空格是参考一篇文章的,但是忘记文章出处了,就略过吧. 去掉首尾空格的代码如下: void trim(string &s) { if( !s.empty() ) { s.erase ...
- C# 使用正则表达式去掉字符串中的数字,或者去掉字符串中的非数字
/// 去掉字符串中的数字 public static string RemoveNumber(string key) { ...
随机推荐
- php的下载
前言:你的坚持,终将美好! 今天给大家说一下,php的下载,由于php的下载本身就是一个压缩包,解压缩后即可使用.所以,解压缩的过程不再赘述. 第一步:在浏览器的地址栏输入:http://www.ph ...
- 忘记了Ubuntu的密码
今天装了个虚拟机,现在装起来顺手的不行,毕竟用了多少次VMware了,结果进去发现,以前用过的虚拟机密码忘了,于是就百度解决方法,总结如下,其实很简单. 我用的Ubuntu 11的版本,后续即使有改动 ...
- Android 自定义键盘车牌号输入
参考资料 :https://github.com/winterPei/LicensePlateUtil 自定义优化代码: https://gitee.com/anan9303/LicensePlate ...
- iphone断点下载,断点续传
本文转载至 http://blog.csdn.net/zaitianaoxiang/article/details/6650469 - (void)loadView { NSURLConnection ...
- rest规范 ; restful 风格; gradel介绍 ; idea安装 ;
[说明]上午整理了一下心情:下午继续开始任务,了解了restful,知道了那个牛人的博士论文,下载了管理工具gradle,并且部署了环境:晚上安装了idea继承环境并且建了一个简单的gradle项目( ...
- 【BZOJ1280】Emmy卖猪pigs 最大流
[BZOJ1280]Emmy卖猪pigs Description Emmy在一个养猪场工作.这个养猪场有M个锁着的猪圈,但Emmy并没有钥匙.顾客会到养猪场来买猪,一个接着一个.每一位顾客都会有一些猪 ...
- Java死锁的理解
我们有时候操作数据库的时候会遇到死锁,那么什么使死锁呢?它的一个比较官方的定义就是:死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将 ...
- jquery lazyload延迟加载技术的实现原理分析_jquery
前言 懒加载技术(简称lazyload)并不是新技术,它是js程序员对网页性能优化的一种方案.lazyload的核心是按需加载.在大型网站中都有lazyload的身影,例如谷歌的图片搜索页,迅雷首页, ...
- 洛谷 P4768 [NOI2018]归程
洛谷 361行代码的由来 数据分治大发好啊- NOI的签到题,可怜我在家打了一下午才搞了80分. 正解应该是kruskal重构树或排序+可持久化并查集. 我就分点来讲暴力80分做法吧(毕竟正解我也没太 ...
- 我的Android进阶之旅------>android中service的onStartCommand()方法中intent为null的问题
今天在维护公司的一个APP的时候,突然爆了空指针异常, Caused by: java.lang.NullPointerException: Attempt to invoke virtual met ...