leetcode 394——字符串解码

leetcode 394——字符串解码

题目描述:

给定一个经过编码的字符串,返回它解码后的字符串。

编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。

你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。

此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。

示例:

s = “3[a]2[bc]”, 返回 “aaabcbc”.
s = “3[a2[c]]”, 返回 “accaccacc”.
s = “2[abc]3[cd]ef”, 返回 “abcabccdcdcdef”.

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/decode-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

提交:

在这里插入图片描述

class Solution {
public:
    int readNum(string::iterator& iter){
        int num = 0;
        while(*iter>='0' && *iter<='9')        //isdigit(*iter)判断*iter是否是数字对应字符
        {
            num = 10 * num + (*iter - '0');
            ++iter;
        } 
        return num;
    }
    string decodeString(string s) {
        string ans;         
        stack<int> help;   //辅助栈
        string::iterator iter;
        for(iter = s.begin();iter != s.end();){
            if(*iter>='0' && *iter<='9'){
                help.push(readNum(iter));
                continue;
            }
            else if(*iter == ']'){
                const int index = ans.find_last_of('[');    //最近的一个 [ 的位置
                string temp = ans.substr(index + 1);        //获得index后面的字符,即 [ 后面的字符
                ans.erase(index);                           //将index以及后面的字符删除
                int num = help.top(); help.pop();           //获得字符串的重复个数
                while(num){
                    ans += temp;
                    --num;
                }
            }
            else{
                ans += *iter;
            }
            ++iter;
        }
        return ans;
    }
};
发布了57 篇原创文章 · 获赞 12 · 访问量 3288

猜你喜欢

转载自blog.csdn.net/weixin_44795839/article/details/104233847