有习记录写过的一些代码,该题是BOSS面试里有人提问我的,所以发布出来供后续有人用到提供一点我自己的看法吧。
/**
*
* @param {待替换字符} a
* @param {被替换的内容} b
* @param {替换的内容} c
* @returns 替换后的字符串
*/
function replace(a,b,c){
var results = [];
var indexs = [];
var flag = false;
for(let i = 0; i < a.length; i++){
for(let j = 0; j < b.length; j++){
if(a[i] != b[j])continue;
if( j == b.length -1){
// 记录a字符串包含b字符串的起始下标
indexs.push(i-(b.length-1))
// 代码进入if里面 说明 a中包含了b
flag = true;
}
}
}
// 如果a没有包含b直接返回a
if(!flag){
return a;
}
// 记录最新索引
var lastIndex = 0;
// 遍历下标
indexs.forEach(e=>{
let str = "";
// 用来保存a字符串中,b字符串起始索引之前的字符 ***b***
for(let i = 0 + lastIndex; i < e ; i++){
str += a[i];
}
results.push(str+c)
lastIndex = e + b.length
})
let str = "";
// 再去除字符串a中的b字符串,应该考虑到末尾的字符
for(var i = indexs.pop() + b.length; i < a.length; i++){
str += a[i];
}
results.push(str);
return results.join("")
}
var results = replace("abcdabc12av","abc","d")
console.log(results)