Leetcode 字符串解码(深搜)

题意

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

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

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

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

思路

使用递归,像k[]这种模式的字符串是可以嵌套的,如k[x k[xx] ]。那么就可以 看成解具有相同子问题k[]的字符串。定义递归函数dfs(string s, int i)返回字符串s解码后的字符串。

代码

class Solution {
public:
    int cur = 0;
    
    string decodeString(string s) {
        return dfs(s, 0);
    }
    
    string dfs(string s, int i) {
        string result = "";
        int num = 0;
        while (i < s.length()) {
            if (isdigit(s[i])) { // 数字
                num = num * 10 + s[i] - '0';
            } else if (s[i] == '[') {
                string temp = dfs(s, i + 1);
                while (num --) {
                    result += temp;
                }
                num = 0;
                i = cur;
            } else if (s[i] == ']') {
                cur = i;
                return result;
            } else { // 字母
                result += s[i];
            }
            i++;
        }
        return result;
    }
};

你可能感兴趣的:(算法,字符串,递归法)