Leetcode算法学习日志-394 Decode String

来源:互联网 发布:mysql简版 编辑:程序博客网 时间:2024/05/17 03:00

Leetcode 394 Decode String

题目原文

Given an encoded string, return it's decoded string.

The encoding rule is: k[encoded_string], where theencoded_string inside the square brackets is being repeated exactly k times. Note that k is guaranteed to be a positive integer.

You may assume that the input string is always valid; No extra white spaces, square brackets are well-formed, etc.

Furthermore, you may assume that the original data does not contain any digits and that digits are only for those repeat numbers,k. For example, there won't be input like 3a or 2[4].

Examples:

s = "3[a]2[bc]", return "aaabcbc".s = "3[a2[c]]", return "accaccacc".s = "2[abc]3[cd]ef", return "abcabccdcdcdef".

题意分析

方括号前的数字代表方括号中string需要重复的次数,解码就是将所有string按照数字表示的次数展开。

解法分析

本题方括号中又嵌套有方括号,就想到从内到外展开,运用递归的思想,本题的关键在于定义一个全局变量i,用来记录已经遍历到的s的位置。本题另一个关键是数字可能是多位的。C++代码如下:

class Solution {private:    int i;//globle variable    string S;public:    string recursion(){        string cur,count;        for(;i<S.size();i++){            if(S[i]==']')                break;            if(isdigit(S[i]))                count.push_back(S[i]);            else if(S[i]=='['){                i++;                string temp=recursion();                for(int j=0;j<stoi(count);j++)                    cur+=temp;                count="";            }            else                cur.push_back(S[i]);        }        return cur;      }    string decodeString(string s) {        S=s;        i=0;        return recursion();            } };
对于字符,可以用isdigit()来判断是否是数字字符。上述代码中,如果遇到【便进入递归调用,i同时加一,如果遇到】就返回,因此递归的返回条件是多样的,要根据问题来定。

原创粉丝点击