题目:给定一个字符串str和一个整数k,如果str中正好有k个连续的’0’出现时,则把这k个连续的’0’删除,实现两个函数返回处理后的字符串。函数一删除字符串中的k个’0’后,这k个位置为空;函数二删除字符串中的k个’0’后,字符之间没有空位。。
例:
函数一需实现:
str=”A00B”,k=2,则返回”A B”。
str=”A0000B000”,k=3,则返回”A0000B “。
函数二需实现:
str=”A00B”,k=2,则返回”AB”。
str=”A0000B000”,k=3,则返回”A0000B”。
实现:
函数一
- 生成两个int型变量,count用于计算当前’0’的个数,start用于记录’0’开始的位置。初始化count=0,start=-1。
- 如果cha==’0’,判断start是否为-1,如果为-1则说明前面没有’0’,将start设置为i;如果start不为1,则说明前面有’0’,start的位置不变。
- 如果cha!=’0’,则此时开始判断’0’的个数,count==k则应当删除这k个’0’,令这些位置的值cha[start++]=0。删除了后需要重置count用于重新统计’0’的个数,重置start为-1,因为是使用-1来判断前面是否还有’0’的。
- 既然把删除时机放在cha不为’0’的时候,当str尾出现’0’时,为了防止删除不彻底,需要在遍历完后,再检查一次count是否为k,若count==k则删除这k个末尾的’0’。
函数二
- 创建StringBuilder类型(线程安全的)对象sb,使用其append方法可以为字符串添加字符。
- 将除去k个’0’的其它字符全部添加到sb中。
1 | public class DeleteKZero { |
1 | /** |
1 | //Test |