投简历的时候遇到一道算法题实现起来不难,思路如下,如有错误欢迎指正。
题目: A、B、C是3个字符串。把A中包含的所有B都替换为C,如果替换以后还有B就继续替换,直到A不包含B为止。
1.请编写程序实现以上功能。不允许使用系统提供的字符串比较、查找和替换函数。2.以上程序是否总是能正常输出结果?如果不是,列出哪些情况下无法正常输出结果,尽可能详细和全面。
思路:
无效情况:考虑一下一眼能看出来的无效情况,当字符串B的长度大于A的时候,A包含不了B,属于无效。
总体思路:1.找到B在A中的位置 2.去除字串B 3.将C插入进B的位置。
详细思路:拿B的第一位和A的每一位循环比较,如果相等,再用B的每一位和A的后面的进行比较,有一不等则break, 全部相等则记录一下此时B的第一位在A中的位置,如此反复直到外层循环结束,循环结束时有记录就进行替换。
function str(A, B, C) {
let arrA = A.split("");
let arrB = B.split("");
let arrC = C.split("");
let flag = true;
let index = []
if(arrA.length < B.length){
return A;
}
for(let i = 0; i < arrA.length; i++){
if(arrB[0] === arrA[i]){
for(let j = 1; j < arrB.length; j++){
if(arrB[j] !== arrA[i+j]){
flag = false;
break;
}
}
if(flag){
index.push(i);
}
}
flag = true;
}
if(index.length > 0){
for(i of index){
arrA.splice(i, arrB.length, ...arrC);
}
}
return arrA.join("");
}