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

(0)

相关推荐

  • 每日一题 C++版(分类有效的IP地址和掩码)

    编程是很多偏计算机.人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用.因此小白决定开辟一个新的板块"每日一题",通过每天一道编程题目来强化和锻炼自己的编程能力 ...

  • 针道之论 | 第10章 扁鹊仓公医案解码(2)

    原创 姚志军 腔调中医 4月16日 栏主:  姚志军,寻灯人,居下馆馆主. 第10章 扁鹊仓公医案解码(2) 医案5:仓公断齐中御府长信病 齐王太后病,召臣意入诊脉,曰:"风瘅客脬,难於大小 ...

  • 针道之论 | 第10章 扁鹊仓公医案解码(1)

    针道之论 | 第10章 扁鹊仓公医案解码(1) 原创 姚志军 腔调中医 4月16日 收录于话题 #脉针密码 17个 脉针密码: 和你一起,寻找能点亮生命的那一盏灯. 栏主:  姚志军,寻灯人,居下馆馆 ...

  • 针道之论 | 第10章 扁鹊仓公医案解码(3)

    原创 姚志军 腔调中医 今天收录于话题#脉针密码17个脉针密码:和你一起,寻找能点亮生命的那一盏灯.栏主: 姚志军,寻灯人,居下馆馆主.第10章 扁鹊仓公医案解码(3)医案17:仓公断齐王后弟宋建病齐 ...

  • 如何做到长寿?科研人员解码“极长寿”人群基因组

    作者|辛雨 近日,意大利研究人员发现,105岁以上的长寿老人往往拥有独特的基因背景,使其身体能更有效地修复DNA. 相关研究结果近日发表于eLife. 这是人类首次对"极长寿"人群 ...

  • 【解码】这份产品质量国抽公告,揭开家电价格战恶果真相

    日前,国家市场监管总局发布的一份2020年139种产品质量国抽报告,揭开了过去几年价格恶战带给家电产业,以及家电消费市场的恶果.有两句话说得好,莫伸手,伸手必被捉:不是不报,时候未到! 宁言||撰稿 ...

  • 指环王解码:现实中,怎样的“王者归来”挽救了西方

    jiao Sons of Gondor , of Rohan , my brothers ! I see in your eyes , the same fear that would take th ...

  • 如何做战略解码?

    什么是战略解码 战略解决的是企业未来3-5年的方向问题:战略解码不是给企业来制定战略,而是把战略落地的事情,如何把企业的战略转化成行动的一系列动作. 你可能听过公司高管谈战略,一群人开会谈来谈去改来改 ...

  • 马拉松|解码汉马1-2-3-4-5

    #情系汉马# 汉马(武汉马拉松)始于2016年,2017年加入"中国马拉松大满贯",2019升为国际铜标赛事,2020升为国际银赛事.受新冠疫情影响,2020年的汉马取消.由中国银 ...

  • 越秀“小升初”派位有变!别慌,3000字解码来了

    5月7日,网络流传出一份2021年越秀区全新出台的"小升初电脑派位分组表". 炸得我,赶紧丢下饭盒码字,因为与去年的分组表相比,可谓阵营大变. 以往每一组小学对应的是7所初中,今年 ...