一道百度前端线上笔试题
生活随笔
收集整理的這篇文章主要介紹了
一道百度前端线上笔试题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
要求:
輸入兩個字符串?? strA? ?長度 1-50 只能包含 0或者1
? strB? ?長度 1-5 ? 可以包含 0或1或? (? 代表? ? 0? 或者 1)
例如:
strA = '1000100'; strB = '1?'; //strB 可能是 10 也可能是 11fun(strA,strB); //===>輸出 2 (就是從頭到尾?遍歷strA? ? ?返回? ?包含? 10?或?11? 的個數 )
?
?
小生不才,方法可能有點笨,下面是我寫的程序(筆試當場?并沒有寫出這么多,字符串包裝類的方法,總記混。。。。)
var strA = '10101101';var strB = '?????';function fun(strA, strB) {var arrB = []; //存儲strB的所有可能var newArr = []; //當出現?時 用來臨時存儲的 數組var num = 0; //記錄是不是第一次var acc = 0; //記錄匹配的總次數var len = strB.length; //strB長度 并且最后strA 包裝類substr方法中 截取長度 var regA = /^[01]{1,50}$/g; //檢測 strA 是否匹配var regB = /^[01\?]{1,5}$/g; //檢測 strB 是否匹配//檢測 輸入的 strA 和 strB 是否比配if (!regA.test(strA)) {console.log('strA 格式 不匹配');return}else{console.log('strA:'+strA);}if (!regB.test(strB)) {console.log('strB 格式不匹配');return;}else{console.log('strB:'+strB);}//得到arrB存儲 strB 的所有可能for (var i = 0; i < strB.length; i++) {if (strB.charAt(i) === '?' && num === 0) { //如果 匹配strB第一位是 ? 添加兩個 到arrB 例如 1? 2?num++;var reg = new RegExp('^([01]{' + i + '})([?]{1})([01?]*)$', 'g');// console.log(reg);arrB.push(strB.replace(reg, function (a, $1, $2, $3) {return $1 + '1' + $3;}));arrB.push(strB.replace(reg, function (a, $1, $2, $3) {return $1 + '0' + $3;}));// console.log(arrB);// strB.replace(/ /,1);// arrB.push} else if (strB.charAt(i) === '?' && num !== 0) { //當匹配的不是第一次的時候 arrB 里面 一定有值的時候 遍歷數組 中的每一位,//替換數組中每一位 i 位置? newArr向數組中push 例如 00 01 10 11 四維 var reg = new RegExp('^([01]{' + i + '})([?]{1})([01?]*)$', 'g');arrB.forEach(val => {// console.log(val);newArr.push(val.replace(reg, function (a, $1, $2, $3) {return $1 + '1' + $3;}));newArr.push(val.replace(reg, function (a, $1, $2, $3) {return $1 + '0' + $3;}));});//arrB存儲 所有strB的可能 始終用 arrB 存儲全部可能 這里 將 newArr克隆給 arrB 然后給newArr 賦值一個空 下一次 ? 時還用他for (var j = 0; j < newArr.length; j++) {arrB[j] = newArr[j];}newArr = [];}else if(strB.charAt(i) !== '?' && num === 0){//如果 匹配strB第一個 不是? arrB 添加一個 strB即可num++;arrB.push(strB);}else{ //如果 匹配strB 不是第一位的地方 也不是 ? arrB 不需要改變 over//沒啥事要干 }}console.log('strB的所有可能:');console.log(arrB);//strA 遍歷 strB中的每一位 有相等的就 +1 arrB.forEach(ele => { for(var i = 0; i < strA.length; i++) { //strA 遍歷數組 中的每一位 === acc 就加一 var reg = '';if(strA.substr(i,len) === ele){console.log(ele+'匹配成功');acc ++;}}});console.log('strB的可匹配次數:'+acc);return acc;};fun(strA, strB);輸出結果
?
感謝瀏覽,您大駕光臨,小編的博客蓬蓽生輝
?
轉載于:https://www.cnblogs.com/96weibin/p/8881918.html
總結
以上是生活随笔為你收集整理的一道百度前端线上笔试题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《用户网络行为画像》读书笔记(一)
- 下一篇: Ubuntu 下安装LEMP环境 实战