这里有一个约定的规则,实现一个方法decodeStr,输入一个字符串,根据约定规则输出编码结果。约定规则如下:
// str = "2[a]1[bc]",返回"aabc"
// str = "2[e2[d]",返回"eddedd"
// str = "3[abc]2[cd]ff",返回"abcabcabccdcdff"
// 可以看出:N[string],表示string正好重复N次。假设字符串一定是有效正确的字符串;但是你需要考虑其它可能出现的
== 代码实现: ==
//主函数
var decodeStr = function (str) {
if (typeof str !== "string") {
throw "请输入字符串"
}
var index = 0,
decodeQueue = [];
while (index < str.length) {
var eleStr = str[index];
if (eleStr === "[") {
decodeQueue.push(index);//记录"["的位置,如2[e2[d]],decodeQueue=[1,4]
}
if (decodeQueue.length > 0 && eleStr === "]") {
var leftIndex = decodeQueue.pop();
var rightIndex = index;
str = strFormat(str, leftIndex, rightIndex);
index = 0;
continue;
}
index++;
}
return str;
};
//辅导函数
var strFormat = function (str, starIndex, rightIndex) {
//辅助函数;将形如str[]对应左右index展开;
temp = str.substring(starIndex + 1, rightIndex);//截取[]中间的字符
var copiedStr = "";
var copyNum = "";
while (str[--starIndex] >= 0) {
copyNum = str[starIndex] + copyNum;
}
for (var i = 0; i < copyNum; i++) {
copiedStr += temp;
}
str = str.substring(0, starIndex + 1) + copiedStr + str.substring(rightIndex + 1);
return str;
};
var str1 = "2[e2[d]]"
console.log(decodeStr(str1));