本文共 769 字,大约阅读时间需要 2 分钟。
第一次在面试中手写算法,果然异常紧张,当时表现应该很不好吧,按照第一反应飞快写出来了一个有错误的版本。。。晚上在实验室仔细琢磨了一下这道题,发现早上自己写的简直。。。啊,我要尴尬死了!
写一个方法,实现将一个字符串中指定子串,全部替换为我们指定的目标串,如输入”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
转载地址:http://gfdii.baihongyu.com/