編寫“智能重復(fù)”smartRepeat函數(shù),實(shí)現(xiàn):
將 3[abc] 變?yōu)閍bcabcabc
將 3[2[a]2[b]] 變?yōu)?aabbaabbaabb
將 2[1[a]3[b]2[3[c]4[d]]] 變?yōu)閍bbbcccddddcccddddabbbcccddddcccdddd
不用考慮輸入字符串是非法的情況郭赐,比如:
2[a3[b]]是錯(cuò)誤的薪韩,應(yīng)該補(bǔ)一個(gè)1,即2[1[a]3[b]]
[abc]是錯(cuò)誤的堪置,應(yīng)該補(bǔ)一個(gè)1躬存,即1[abc]
/**
* @param {string} repeatStr
*/
function smartRepeat(repeatStr){
let numArr=[],//存放數(shù)字
strArr=[];//存放字母
let str = '';
for(let i=0;i<repeatStr.length-1;i++){
console.log('---',numArr,strArr,str)
let temp = repeatStr.charAt(i);
if(parseInt(temp)>0){//如果是數(shù)字
numArr.push(parseInt(temp));
}else{
if(temp == '['){//發(fā)現(xiàn)要循環(huán)的起始
strArr.push('')
}else if(temp == ']'){//當(dāng)前字母結(jié)束
// 如果這個(gè)字符是],那么就①將numArr彈棧舀锨,②strArr彈棧岭洲,③把字符串棧的新棧頂?shù)脑刂貜?fù)剛剛彈出的那個(gè)字符串指定次數(shù)拼接到新棧頂上。
let t = numArr.pop();
let m = strArr.pop();
strArr[strArr.length-1] += m.repeat(t);
}else{
// 如果這個(gè)字符是字母坎匿,那么此時(shí)就把棧頂這項(xiàng)改為這個(gè)字母
strArr[strArr.length-1] += temp;
}
}
}
str = strArr[0].repeat(numArr[0])
return str;
}