CVTE长期实习生计划前端第五场在线测评编程题
刚做完的CVTE长期实习生计划前端第五场在线测评编程题,新鲜热辣出炉
位数越前,权重越大,A > B return 1 A < B return -1 A = B return 0
用例:
A: 1.9999.9999.9999 B: 2.0 return -1
A: 2.0.0.0 B: 2.0 return 0
A: 1.15.6 B: 1.14.999.999 return 1
这题比较简单,没啥意思
编程题2:判断target是否由字符串A跟字符串B合成的,对在A跟B中出现的顺序有严格要求,函数isMerge返回boolean
具体描述记不太清,用例:
target: “hello” strA: “hlo” strB: “el” true
target: “aaaaaa” strA: “aa” strB:”aaa” false
target: “aaaaaa” strA: “aaa” strB: “aaa” true
target: “catch” strA: “cht” strB: “ac” false
我的解答(不敢用太多字符串跟数组方法,要在浏览器编写并且要在无运行情况下一次AC)
function isMerge (target, strA, strB) {
if (target.length !== strA.length + strB.length
|| target.length === 0
|| strA.length === 0
|| strB.length === 0) {
return false;
}
if (!(target instanceof Array)) {
//考虑递归传进来的已经是数组了
target = target.split('');
strA = strA.split('');
strB = strB.split('');
}
while (target.length > 0) {
if (target[0] === strA[0] && target[0] === strB[0]) {
// 这里出现了两边都可取的情况,采用递归,对返回来的结果判断是否继续
// 假设取A字符串
// 因为数组是对象(作为值传递给函数也会指向同一地址)
// 所以这里先concat生成新数组(新地址)避免污染后续判断
target.shift();
if (isMerge(target.concat(), strA.concat().shift(), strB.concat())) {
return true;
} else {
strB.shift();
}
} else if (target[0] === strA[0]) {
target.shift();
strA.shift();
} else if (target[0] === strB[0]) {
target.shift();
strB.shift();
} else {
return false;
}
}
return true;
#实习##笔试题目##前端##测评##广州视源电子科技股份有限公司#