LeetCode Decode String

Given an encoded string, return it's decoded string.

The encoding rule is: k[encoded_string], where the encoded_string inside the square brackets is being repeated exactly k times. Note that k is guaranteed to be a positive integer.

You may assume that the input string is always valid; No extra white spaces, square brackets are well-formed, etc.

Furthermore, you may assume that the original data does not contain any digits and that digits are only for those repeat numbers, k. For example, there won't be input like 3a or 2[4].

Examples:

s = "3[a]2[bc]", return "aaabcbc".
s = "3[a2[c]]", return "accaccacc".
s = "2[abc]3[cd]ef", return "abcabccdcdcdef".

递归:

class Solution {
public:
    string decodeString(string s) {
        int i = 0;
        return decodeString(s, i);
    }
    string decodeString(string& s, int& i) {
        string res;
        while(i<s.size() && s[i] != ']') {
            if(!isdigit(s[i]))
                res += s[i++];
            else{
                int n = 0;
                while(i<s.size() && isdigit(s[i]))
                    n = n*10 + s[i++] - '0';
                i++;
                string t = decodeString(s, i);
                i++;
                while(n--) res += t;
            }
        }
        return res;
    }
};

非递归:

string decodeString(string s) {
        stack<int> repete;
        stack<string> str;
        string cur;
        int n = 0;
        for(int i = 0; i<s.size(); i++){
            if(isdigit(s[i]))
                n = n*10 + s[i] - '0';
            else if(s[i] == '['){
                str.push(cur);
                repete.push(n);
                n = 0;
                cur = "";
            }
            else if(s[i] == ']'){
                string tmp = str.top();
                str.pop();
                int num = repete.top();
                repete.pop();
                while(num--) tmp += cur;
                cur = tmp;
            }
            else cur += s[i];
        }
        return cur;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 12,147评论 0 10
  • Given an encoded string, return it's decoded string. Desc...
    Juliiii阅读 2,338评论 0 0
  • NAME dnsmasq - A lightweight DHCP and caching DNS server....
    ximitc阅读 7,943评论 0 0
  • 半 桥 对岸很近,我却不能靠脚抵达 船工很勤,可我总是错过 关河涌向天外的沉默 一座半桥心中起 它不在未来 在此刻...
    蘭知雪阅读 4,334评论 0 0
  • 如何让对方无法拒绝,安利一句话: 晓之以理,动之以情,诱之以利,挟之以灾。 我在一家公司做项目经理的时候,经常需要...
    明哥聊求职阅读 2,958评论 0 2