天天看點

LeetCode-394. Decode String

Given an encoded string, return its 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".      

題解:

這題很像224和227題。

class Solution {
public:
    string decodeString(string s) {
        int n = s.length();
        string res = "";
        stack<string> str;
        int num = 0;
        for (int i = 0; i < n; i++) {
            if (s[i] >= '0' && s[i] <= '9') {
                num *= 10;
                num += s[i] - '0';
            }
            else if (s[i] == '[') {
                str.push(res);
                str.push(to_string(num));
                num = 0;
                res.clear();
            }
            else if (s[i] == ']') {
                int k = stoi(str.top());
                str.pop();
                string tmp = str.top();
                str.pop();
                for (int j = 0; j < k; j++) {
                    tmp += res;
                }
                res = tmp;
            }
            else {
                res += s[i];
            }
        }
        return res;
    }
};