• Leetcode 394. 字符串解码 中等 字符串 递归


    394. 字符串解码

    题目:

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

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

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

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

    示例 1:

    输入:s = "3[a]2[bc]"
    输出:"aaabcbc"
    示例 2:

    输入:s = "3[a2[c]]"
    输出:"accaccacc"
    示例 3:

    输入:s = "2[abc]3[cd]ef"
    输出:"abcabccdcdcdef"
    示例 4:

    输入:s = "abc3[cd]xyz"
    输出:"abccdcdcdxyz"

    思路:

    注意[]中还可能套括号,大括号中就有可能先有小括号重复。

    因此采用递归的思路。使用getString来获取括号内的字符串。这样可以进行嵌套来获取括号内所有字符串

    class Solution {
    public:
        //全局字符串
        string src;
        //指针
        size_t ptr;
        string decodeString(string s) {
            src=s;
            ptr=0;
            return getString();
        }
        string getString(){
            //如果遇到末尾或者括号结束就返回
            if(ptr==src.size()||src[ptr]==']'){
                return "";
            }
            char c=src[ptr];
            int rep=1;
            string ret;
            //如果是数字,就先获取数字,然后用getString获取括号内字符串
            if(isdigit(c)){
                rep=getdigit();
                //跳过左括号
                ++ptr;
                string str=getString();
                //跳过右括号
                ++ptr;
                //按数字重复输出
                while(rep>0){
                    ret+=str;
                    rep--;
                }
            }else if(isalpha(c)){
                //如果是字符则直接复制
                ret=src[ptr++];
            }
            //完成本括号,并加上后续的字符串
            return ret+getString();
        }
        int getdigit(){
            int ret=0;
            //数字可能有多位数
            while(ptr<src.size()&&isdigit(src[ptr])){
                ret=ret*10+src[ptr++]-'0';
            }
            return ret;
        }
    };
  • 相关阅读:
    什么是浮动IP
    How can I detect multiple logins into a Django web application from different locations?
    git add -A使用说明
    理解水平扩展和垂直扩展
    php != 和 !== 的区别
    wireshark:Couldn't run /usr/bin/dumpcap in child process: Permission denied
    Unable to VNC onto Centos server remotely
    systemctl使用说明
    KiB、MiB与KB、MB的区别
    python带setup.py的包的安装
  • 原文地址:https://www.cnblogs.com/zl1991/p/16149303.html
Copyright © 2020-2023  润新知