要求: 數組
輸入兩個字符串 strA 長度 1-50 只能包含 0或者1spa
strB 長度 1-5 能夠包含 0或1或? (? 表明 0 或者 1) code
例如:blog
strA = '1000100';
strB = '1?'; //strB 多是 10 也多是 11
fun(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);
輸出結果博客
感謝瀏覽,您大駕光臨,小編的博客蓬蓽生輝io