[路飞]_js算法:leetcode 394-字符串解码

66 阅读1分钟

leetcode 394. 字符串解码

问题描述: 给定一个经过编码的字符串,返回它解码后的字符串。

编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。

你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。

此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。

 

示例 1:

输入: s = "3[a]2[bc]"
输出: "aaabcbc"

示例 2:

输入: s = "3[a2[c]]"
输出: "accaccacc"

示例 3:

输入: s = "2[abc]3[cd]ef"
输出: "abcabccdcdcdef"

思路: 递归

/**
 * @param {string} s
 * @return {string}
 */
var decodeString = function(s) {
    let i=0;
    let ret='';
while(s[i]){
    if(s[i]>='a'&&s[i]<='z'){
        ret+=s[i];
        i++
    }
    else{
        let num=0;
        while(s[i]>='0'&&s[i]<='9'){
            num=num*10+(s[i++]-'0');
        }
        i++;
        let l=i,r=i,cnt=1;
        while(cnt){
            r+=1;
            if(s[r]=='[')cnt++;
            else if(s[r]==']')cnt--;
        }
        console.log(s.substr(l,r-l))
        let temp=decodeString(s.substr(l,r-l))
        while(num--){
            ret+=temp;
        }
        i=r+1
    
    }
}
return ret;
};