腾讯实习生面试题--替换字符串中指定子串

第一次在面试中手写算法,果然异常紧张,当时表现应该很不好吧,按照第一反应飞快写出来了一个有错误的版本。。。晚上在实验室仔细琢磨了一下这道题,发现早上自己写的简直。。。啊,我要尴尬死了!


题目描述:

写一个方法,实现将一个字符串中指定子串,全部替换为我们指定的目标串,如输入”abcdabc“,将其中"ab"全部替换为”ccc“。

输入

3个字符串

输出

void


思路:

从左向右扫描,如果可以切下ta长度的子串的话,就切下,与ta比较是否equals,如果equals,sb中加入th,如果不equals,sb加入切下子串temp的第一个字符,然后指针后移一位。如果文本串不足以切下ta长度,逐个加入文本串中指针i所在位置的字符,然后i后移一个位置。

反思:

当时写的程序没有考虑到,替换之后文本串的长度改变问题,以至于面试官问如果把c替换为ccb会不会出现无限循环的问题?按照下面的程序,当然不会出现这种情况,因为i作为指针,它之前的部分都是处理好的,它的移动也是根据不同情况变步长的。

当然这个问题坑很深,对java中字符串常用的方法得很熟才行,如subString带两个参数时第二个参数是可以等于文本串的长度的,这时不会越界,并且第一个if处,也应该加=。

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;


public class Main{
	public static void change(String ori,String ta,String th){
		StringBuilder sb = new StringBuilder();
		for(int i=0;i<ori.length();){
			String temp = "";
			if(i+ta.length()<=ori.length()){
				temp = ori.substring(i, i+ta.length());
			}else{
				sb.append(ori.charAt(i));
				i++;
				continue;
			}
			
			if(temp.equals(ta)){
				sb.append(th);
				i = i+ta.length();
			}else{
				sb.append(temp.charAt(0));
				i++;
			}
		}
		System.out.println(sb.toString());
	}

	public static void main(String args[]){
		String ori = "aaaaaa";
		String ta = "aaaa";
		String th = "bx";
		change(ori,ta,th);

	}
}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值