实现规定算法: str = “2[a]1[bc]“,返回“aabc“

这里有一个约定的规则,实现一个方法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));
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值