去掉字符串中连续出现k个0的子串
2015-09-28 18:55
295 查看
去掉字符串中连续出现k个0的子串
【题目】
给定一个字符串str和一个整数k,如果str中正好有连续的k个'0'字符出现时,把k个连续的'0'去掉,返回处理后的字符串。
【举例】
str = "A00B",k = 2,返回"A**B";
str = "A0000B000",k = 3,返回"A0000B***";
【解答】
使用变量count统计连续出现的0的次数,如果当前字符=='0',则count++,否则如果count==k,则将i-count到i的字符数组的值赋值为*,再将count还原为0,重新统计子串0个数。
注意一点,我们处理k个0的子串的时候,是在s[i]!='0'的时候,所以,如果满足条件的子串在字符串的结尾,而结尾已经没有不为0的字符,所以在循环以后,记得判断结尾子串是否符合条件。
【题目】
给定一个字符串str和一个整数k,如果str中正好有连续的k个'0'字符出现时,把k个连续的'0'去掉,返回处理后的字符串。
【举例】
str = "A00B",k = 2,返回"A**B";
str = "A0000B000",k = 3,返回"A0000B***";
【解答】
使用变量count统计连续出现的0的次数,如果当前字符=='0',则count++,否则如果count==k,则将i-count到i的字符数组的值赋值为*,再将count还原为0,重新统计子串0个数。
注意一点,我们处理k个0的子串的时候,是在s[i]!='0'的时候,所以,如果满足条件的子串在字符串的结尾,而结尾已经没有不为0的字符,所以在循环以后,记得判断结尾子串是否符合条件。
public class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); String str = s.next(); int k = s.nextInt(); System.out.println(removeKZero(str, k)); } public static String removeKZero(String str, int k) { char[] s = str.toCharArray(); int count = 0; int start = -1;//记录0开始的位置 for (int i = 0; i < s.length; i++) { if (s[i] == '0') {// count记录连续出现的0的次数 start = start == -1 ? i : start; count++; } else { if (count == k) {// 如果count==k,则将字符数组i-count到i的值赋值为* for (int j = i - count; j < i; j++) { s[j] = '*'; } } start = -1; count = 0;// 如果字符不为0,则将count赋值为0,重新计数 } } //最后记得处理最后字符串结尾满足条件的0 if (count == k) { while (count-- != 0) { s[start++] = '*'; } } return String.valueOf(s); } }
相关文章推荐
- 最大堆的插入/删除/调整/排序操作
- 如何用ngrok将内网映射到公网
- hdu 5481 Desiderium
- 从拍照/相册里选择图片切图
- Swift中的闭包
- 【设计模式】工厂模式
- iOS9.0.1给我带来的问题
- Largest Rectangle in Histogram
- 我们是否应该遵守代码规范?
- Python: NLTK几个入门函数
- 传感器的使用:光线传感器
- hdu 1754 I Hate It 线段树-区间最值
- 配置Tomcat的访问日志格式化输出
- 稀疏矩阵的抽象数据类型和一些基本操作的实现
- hdu 1754 I Hate It 线段树-区间最值
- noip2011 观光公交 (贪心)
- mybatis 模糊查询%问题
- Android 性能优化之使用MAT分析内存泄露问题
- Windows 7 注册串口工具mscomm32.ocx
- Android四大组件之Service小试牛刀