leetcode394字符串解码(回溯|栈)「建议收藏」

leetcode394字符串解码(回溯|栈)「建议收藏」给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。示例 1:输入:s = “3[a]2[bc]”输出:”aaabcbc”示例 2:输入:s =

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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

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

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

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

示例 1:

输入:s = "3[a]2[bc]"
输出:"aaabcbc"
示例 2:

输入:s = "3[a2[c]]"
输出:"accaccacc"
示例 3:

输入:s = "2[abc]3[cd]ef"
输出:"abcabccdcdcdef"
示例 4:

输入:s = "abc3[cd]xyz"
输出:"abccdcdcdxyz"

题解
注意可能会出来[[]]嵌套的情况

  1. 回溯
class Solution { 
   
public:
    stringstream ss;
    string chartostring(char a){ 
   
        string t = "";
        t.append(1,a);
        return t;
    }
    string dfs(int l,int r,string &s){ 
   
        if(l == r)return chartostring(s[l]);
        if(l > r)return "";
        string t = "";
        if(s[l] >= 'a' && s[l] <= 'z'){ 
   
            t.append(1,s[l]);
            return t += dfs(l + 1,r,s);
        }
        else{ 
   
            int k = l;
            while(k < s.size() && s[k] >= '0' && s[k] <= '9')k ++;
            ss.clear();
            ss << s.substr(l,k - l);
            int num;
            ss >> num;
            int rr = k + 1,cnt = 1;
            while(cnt != 0){ 
   
                if(s[rr] == '[')cnt ++;
                else if(s[rr] == ']')cnt --;
                rr ++;
            }
            rr --;
            string tt = dfs(k + 1,rr - 1,s);
            for(int i = 0;i < num;i ++)t.append(tt);
            t += dfs(rr + 1,r,s);
        }
        cout<<t<<endl;
        return t;
    }
    string decodeString(string s) { 
   
        string res = dfs(0,s.size() - 1,s);
        return res;
    }
};
class Solution { 
   
public:
    string chartostring(char x){ 
   
        string t = "";
        t.append(1,x);
        return t;
    }
    bool isalpha(char x){ 
   
        return x >= 'a' && x <= 'z';
    }
    bool isnum(char x){ 
   
        return x >= '0' && x <= '9';
    }
    string decodeString(string s) { 
   
        stack<string>stk;
        stringstream ss;
        string res = "";
        int num = 0;
        for(int i = 0;i < s.size();i ++){ 
   
            if(isalpha(s[i]) || s[i] == '['){ 
   
                stk.push(chartostring(s[i]));
            }
            else if(isnum(s[i])){ 
   
                int j = i;
                while(j < s.size() && isnum(s[j]))j ++;
                stk.push(s.substr(i,j - i));
                i = j - 1;
            }else{ 
   
                string t = "";
                while(stk.top() != "["){ 
   
                    t.insert(0,stk.top());
                    stk.pop();
                }
                stk.pop();
                ss.clear();
                ss << stk.top();
                ss >> num;
                stk.pop();
                string tt = "";
                for(int i = 0;i < num;i ++){ 
   
                    tt.insert(0,t);
                }
                stk.push(tt);
            }
        }
        while(!stk.empty()){ 
   
            res.insert(0,stk.top());
            stk.pop();
        }
        return res;
    }
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168712.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • goland 2021.3激活 3月最新注册码

    goland 2021.3激活 3月最新注册码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    42
  • oracle 常见函数_oracle有没有包含的函数

    oracle 常见函数_oracle有没有包含的函数oracle 数据库中主要使用两种类型的函数:1.  单行函数:操作一行数据,返回一个结果常用的单行函数有:字符串函数:对字符串操作。数字函数:对数字进行计算,返回一个数字。日期函数:对日期和时间进行处理。转换函数:可以将一种数据类型转换为另外一种数据类型。2.  聚合函数(多行函数、分组函数、组函数):操作多行数据,并返回一个结果。比如 SUM一、字符串函数字符函数接受字符参数,这些参数可以是表…

    2022年10月22日
    0
  • Ant安装及环境配置「建议收藏」

    Ant安装及环境配置「建议收藏」1什么是AntApacheAnt是一个基于Java的生成工具。生成工具在软件开发中用来将源代码和其他输入文件转换为可执行文件的形式(也有可能转换为可安装的产品映像形式)。随着应用程序的生成过程变得更加复杂,确保在每次生成期间都使用精确相同的生成步骤,同时实现尽可能多的自动化,以便及时产生一致的生成版本2、下载、安装、环境变量配置ant下载地址https://download…

    2022年7月24日
    2
  • vs2005配置OpenCv2.3.1

    编译OpenCv1用CMake导出VC++项目文件运行cmake-gui,设置whereisthesourcecode路径为OpenCV安装路径(本文档假定安装位置为:c:\OpenCV

    2021年12月18日
    40
  • 高中四个基本不等式公式_高中数学基本不等式典型题

    高中四个基本不等式公式_高中数学基本不等式典型题高一数学要从掌握好基本知识点开始,并且要及时做好归纳总结。以下是小编为您整理的关于的相关资料,供您阅读。1.不等式性质比较大小方法:1作差比较法2作商比较法不等式的基本性质①对称性:a>bb>a②传递性:a>b,b>ca>c③可加性:a>ba+c>b+c④可积性:a>b,c>0ac&gt…

    2022年9月14日
    0
  • com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException异常解决方法

    com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException异常解决方法在使用MySQL驱动进行JDBC时候出现了以下异常Exceptioninthread”main”com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:Couldnotcreateconnectiontodatabaseserver. atsun.reflect.NativeConstru…

    2022年6月23日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号