LeetCode 394. Decode String

394. Decode String

Description
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”.

Analysis
这道题的意思就是讲所给字符串拓展,得到所需结果。
我的做法是利用了递归。
即当前的字符数组的字符串拓展结果等于它[ ]内的字符串拓展结果的整数倍。
注意两个点。一是,下标应该按引用调用,这样才能保证之后调用递归的函数能在递归之后继续进行计算。
第二个是我用了两个index++;这是因为存在’[”]’。
当我们计算子字符串的字符串拓展结果时,不应该连着’[‘。
同样当我们计算完子字符串的结果时,我们应该忽略子字符串的’]’来继续计算。

Code

class Solution {
public:
    string res(const string& s, int& index) {
        string str;

        while (index < s.length() && s[index] != ']') {
            if (!isdigit(s[index])) str.push_back(s[index++]);

            else {
                int num = 0;
                while (index < s.size() && isdigit(s[index])) num = num*10+s[index++]-'0';

                index++; 

                string temp = res(s, index);

                index++; 

                while (num--) str += temp;
            }
        }

        return str;
    }

    string decodeString(string s) {
        int index = 0;

        return res(s, index);
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值