Leetcode_394_ Decode String_dfs搜索_我的算法之路_解密字符串

在这个题目中,在给定3[a]2[bc]这种形式的字符串,我们需要来解密这个字符串,即用递归的思想来做下面是我的代码

class Solution {
public:
    string decodeString(string s) {
        string res;
        for(int i=0;i<s.size();)//首先对字符串的每一个字符进行枚举
        {
            if(!isdigit(s[i])) res+=s[i++];//用到isdigit函数来判断该字符是不是1-9的数字,如果不是将字符加到答案中,这其中有一个陷阱,就是满足if语句之后,执行关系式res+=[i++]用完i才能进行++的自加运算,进入到else语句则不行。
            else
            {
                int k=0;
                while(isdigit(s[i])) k=k*10+s[i++]-'0';//此语句常用来计算字符串中数字字符的大小,减去‘0’是因为ascii码将字符数字转换成数字字符。 
                int j=i+1,sum=1;//这其中涉及到了括号序列的问题,设置一个寄存器,当遇到左括号为加1遇到右括号为减一,当sum值为0是,开始的左括号与为0的右括号匹配。
                while(sum>0)
                {
                    if(s[j]=='[') sum++;
                    if(s[j]==']') sum--;
                    j++;
                }//此时j移动到了与开始左括号所匹配的右括号的下一位。
                string r=decodeString(s.substr(i+1,j-i-2));//如果内部嵌套一个k规则,则递归到下一层来进行运算,即下一层的字符串长度为j-i-2,从i+1位开始,在次用到了substr函数。
                while(k--) res+=r;//然后就用k*所递归出来的字符串。注意语句在哪个括号内
                i=j;
            }    
        }
         return res;//for循环执行完毕,然后返回结果。
    }
};

加油加油!!!

猜你喜欢

转载自blog.csdn.net/Chenxiaoyu99/article/details/83747268
今日推荐