Skip to content

Latest commit

 

History

History
33 lines (28 loc) · 1.37 KB

394-字符串解码.md

File metadata and controls

33 lines (28 loc) · 1.37 KB

394-字符串解码.md

难度:中等

原题

因为会员才能看到,所以截了个图

这道题一上来就感觉要用正则来匹配,看到文章中写的使用栈,递归啥的,感觉都挺麻烦的

const decodeString = function (s) {
    // 这个正则只能匹配 3[a]2[bc],3[a2[c]] 就不行了
    return s.replace(/(\d+)\[(\w+)\]/g, (a, b, c) => {
        // 匹配的 a 就是 3[a] 这种,b 就是第一个括号(\d+)匹配到的数字,c 就是第二个括号(\w+)匹配到的字符串,也就是 a b c 都是按照层级顺序这样往后排的
        return c.repeat(b);
    });
}

面试官肯定不会就这么容易让你过的, 比如不适用正则呢 比如不使用 Stringrepeat 方法呢 其实还是要揣摩面试官考察你的意图,如果是想考察栈这种数据结构,或者是想考察递归和回溯思想的理解呢?

解法 遍历字符串,遇到number就放到 {type: number, value: x} 然后加上 repeat 中来找到后续闭合的 ] 最后得到这个结构,然后不断递归的计算

解法二 转换成一个数组就好了 for循环,遇到 number 就添加进去,然后继续下一个,遇到 [ / ] 也添加进去 遇到字符串,就一直累加,直到遇到number或者 [ / ],然后累加进去