字符串替换

    面试遇到的一道题:在一个小写字母组成的字符串里,把连续出现的2个“aa”替换为“bb”,多于或者少于2个都不行。

    实现语言为Java

	public static final char DEST_CHAR= 'a'; 
	public static final int REPEAT_NO = 2;
/**
 * 替换字符串里的一个子字符串,该字符串是重复REPEAT_NO次的DEST_CHAR,不能大于等于,比如:
 * 替换2个为b
 * aaab,不用换
 * aabaaadfaa, 替换bbbaaadfbb
 * @param str	原始需处理字符串
 * @return 处理成功字符串
 */
	public String replace(String str) {
		StringBuilder sourceStr = new StringBuilder(str + "b");	//添加多一个目标替换字符,方便最后一遍遍历,结束后再去掉
		int destCharNo = 0;	//重复目标字母个数
		int destCharBegin = 0;	//发现目标字母的其实位置
		int strLen = sourceStr.length();
		
		for(int index = 0; index < strLen; index++) {
			if(sourceStr.charAt(index) == DEST_CHAR) {
				if(destCharNo == 0){
					destCharBegin = index;
				}
				destCharNo++;
			} else {
				if((destCharBegin + REPEAT_NO) == index		//到了下一个才能发现当前是否重复了REPEAT_NO次
						&& destCharNo == REPEAT_NO) {
						sourceStr.replace(destCharBegin, index, "bb");
					}
				destCharNo = 0;	//重置记录状态
				destCharBegin = 0;
			}
		}
		sourceStr.deleteCharAt(strLen - 1);	//去除最后一个添加字符
		return sourceStr.toString();
	}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值