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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JVM调优工具「建议收藏」

    JVM调优工具「建议收藏」JVM调优工具Jconsole:jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用。对垃圾回收算法有很详细的跟踪。JProfiler:商业软件,需要付费。功能强大。VisualVM:JDK自带,功能强大,与JProfiler类似。推荐。如何调优观察内存释放情况、集合类检查、对象树上面这些调优工具都提供了强大的功能,但是总的来说一般分为以下几类功能堆信息查…

    2022年6月1日
    33
  • C语言 socket函数

    C语言 socket函数socket#include<sys/types.h>#include<sys/socket.h>intsocket(intdomain,inttype,intprotocol);参数描述domain设置通信域(本地(PF_LOCAL),ipv4(AF_INET),ipv6()等)type设置套接字通信类型(TCP,双向字…

    2022年7月14日
    13
  • mysql截取中文字符_mysql截取字符串函数-Go语言中文社区

    mysql截取中文字符_mysql截取字符串函数-Go语言中文社区目标将rull字段值的0.1g*14粒/1.5mg*30片/100ml(氨甲环酸0.5g:氯化钠0.84g)*1瓶中的mg/g/ml开头的数字取出设置到另外一个字段上去SELECTidfromsheet2whererulllike’%ml%’;SELECTid,count,LEFT(rull,LOCATE(‘g’,rull)-1)fromsheet2w…

    2022年5月5日
    132
  • 无插件纯Web 3D机房,HTML5+WebGL倾力打造

    无插件纯Web 3D机房,HTML5+WebGL倾力打造前言-最近项目开发任务告一段落,刚好有时间整理这大半年的一些成果。使用html5时间还不久,对js的认识还不够深入。没办法,以前一直搞java,对js的一些语言特性和概念一时还转换不过来。上一篇大数

    2022年8月3日
    9
  • 实践新闻发布系统

    实践新闻发布系统实践新闻发布系统

    2022年4月24日
    46
  • Perl正则表达式(2) – 用正则表达式进行匹配

    Perl正则表达式(2) – 用正则表达式进行匹配Perl正则表达式2.用正则表达式进行匹配2.1用m//进行匹配到目前为止,我们都是讲正则表达式的内容写在一对斜线内,如/fred/。但其实这是m//的简写,其中m代表match,和之前看到的qw//类似,我么可以自行选择用于保卫内容的一堆字符作为边界,所以上面这个例子可以改写为m{fred},m[fred],m!fred!等。在不冲突的情况下,建议使用双斜线//或…

    2022年5月20日
    53

发表回复

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

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