打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
leetcode394:字符串解码

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

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

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

此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。
eg:
输入:s = “3[a]2[bc]” 输出:“aaabcbc”
输入:s = “3[a2[c]]” 输出:“accaccacc”
输入:s = “2[abc]3[cd]ef” 输出:“abcabccdcdcdef”
输入:s = “abc3[cd]xyz” 输出:“abccdcdcdxyz”

递归:
本题解用原函数进行递归,用repeatCnt来记录左括号的层数,最外层进入下一级递归, 最外层以内的字符直接入栈。

class Solution {public:    string decodeString(string s) {string temp,result;        int tempCnt=0;        int cnt = 0;        int repeatCnt=0;        for(int i=0;i<s.size();i  )        {if(s[i]>=48&&(s[i]<=57))            {if(repeatCnt==0)                {if(tempCnt)                    {tempCnt =tempCnt*10  s[i]-48;                    }                    else                        tempCnt=s[i]-48;                }                else                {temp.push_back(s[i]);                }            }            else if(s[i]>=97&&(s[i]<=122))            {if(repeatCnt==0)                {result.push_back(s[i]);                }                else                {temp.push_back(s[i]);                }            }            else if(s[i]==91)            {if(repeatCnt==0)                {repeatCnt = 1;                    cnt = tempCnt;                    tempCnt = 0;                }                else                {repeatCnt  ;                    temp.push_back(s[i]);                }               }            else if(s[i]==93)            {if(repeatCnt>1)                {repeatCnt--;                    temp.push_back(s[i]);                }                else                {temp = decodeString(temp);                    for(int i=0;i<cnt;i  )                    {for(int j=0;j<temp.size();j  )                        {result.push_back(temp[j]);                        }                    }                    repeatCnt--;                    temp.clear();                }             }        }        return result;    }};

需要注意的时,每一次调用temp结束后都需要做clear的操作。另外,string的push_back只能加入一个字符, 如果采用append, 就可以加入一个字符串。  

来源:https://www.icode9.com/content-4-833101.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
华为机试HJ92:在字符串中找出连续最长的数字串
《C语言程序设计》第三版课后答案
每日一题 C++版(分类有效的IP地址和掩码)
jquery ajax 向后台传递数组参数示例
人民币大写转化函数(C#版) @阿良.NET
截取指定长度html内容,并保留html格式标记(c#版)-程序开发-红黑联盟
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服