美文网首页leetcode和算法----日更
leetcode 394 字符串解码

leetcode 394 字符串解码

作者: Arsenal4ever | 来源:发表于2020-01-11 23:45 被阅读0次

这题利用了双栈!!!一个放重复次数,一个放重复的字母!!!很牛逼,整了接近两天!看 B 站上 java 的解法终于弄明白了!!!

下面是 python 版的代码:

class Solution(object):
    def decodeString(self, s):
        """
        :type s: str
        :rtype: str
        """
        numStack = []
        strStack = []
        tail = ""
        num = 0
        for c in s:
            if c.isdigit():
                num = num * 10 + int(c)
            elif c == "[":
                numStack.append(num)
                strStack.append(tail)
                tail = ""
                num = 0
            elif c == "]":
                tmp = strStack.pop()
                repeatTimes = numStack.pop()
                tmp += tail * repeatTimes
                tail = tmp
            else:
                tail += c
        return tail

原版的 Java 解法:

class Solution {
    public String decodeString(String s) {
        Deque<Integer> numStack = new ArrayDeque<>();
        Deque<String> strStack = new ArrayDeque<>();

        StringBuilder tail = new StringBuilder();
        int n = s.length();
        for (int i = 0; i < n; i++) {
            char c = s.charAt(i);
            if (Character.isDigit(c)) {
                int num = c - '0';
                while (i+1 < n && Character.isDigit(i+1)) {
                    num = num * 10 + s.charAt(i + 1) - '0';
                    i++;
                }
                numStack.push(num);
            } else if (c == '[') {
                strStack.push(tail.toString());
                tail = new StringBuilder();
            } else if (c == ']') {
                StringBuilder tmp = new StringBuilder(strStack.pop());
                int repeatedTimes = numStack.pop();
                for (int j = 0; j < repeatedTimes; j++) {
                    tmp.append(tail);
                }
                tail = tmp;
            } else {
                tail.append(c);
            }
        }
        return tail.toString();
    }
}

相关文章

  • LeetCode 394. 字符串解码 | Python

    394. 字符串解码 题目来源:力扣(LeetCode)https://leetcode-cn.com/probl...

  • 打卡-字符串解码

    394. 字符串解码

  • leetcode 394 字符串解码

    这题利用了双栈!!!一个放重复次数,一个放重复的字母!!!很牛逼,整了接近两天!看 B 站上 java 的解法终于...

  • 394.字符串解码

    ​394.字符串解码 题目分析 对这个题目的需求进行分析(需求分析来自Leetcode用户名为凛冬[1])我只是稍...

  • leetcode-394. 字符串解码

    题目 给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方...

  • Leetcode394. 字符串解码

    题目 给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中...

  • leetcode 394. 字符串解码

  • leetcode-394. 字符串解码

    题目: 给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其...

  • 394. 字符串解码

    394.字符串解码给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string...

  • 394. 字符串解码

    394. 字符串解码 给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_stri...

网友评论

    本文标题:leetcode 394 字符串解码

    本文链接:https://www.haomeiwen.com/subject/hpxiactx.html