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


相关推荐

  • Windows小知识—恶意软件删除工具(mrt)

    Windows小知识—恶意软件删除工具(mrt)使用方法:打开运行窗口:win+r; 输入”mrt”,回车;3、在弹框之后一直下一步或者自定义都行;

    2022年6月24日
    32
  • 共享内存同步机制_共享内存通信机制

    共享内存同步机制_共享内存通信机制共享内存是SystemV版本的最后一个进程间通信方式。共享内存,顾名思义就是允许两个不相关的进程访问同一个逻辑内存,共享内存是两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可以将同一段物理内存连接到他们自己的地址空间中,所有的进程都可以访问共享内存中的地址。如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任…

    2025年8月8日
    2
  • 数据绑定之DataFormatString

    数据绑定之DataFormatString设定BoundField的DataFormatString,通常有以下几种DataFormatString='{0:C}’货币,货币的格式取决于当前Thread中Culture的设置DataF

    2022年7月3日
    24
  • django request.get_对象生气了怎么哄

    django request.get_对象生气了怎么哄Django在接收到http请求之后,会根据http请求携带的参数以及报文信息创建一个WSGIRequest对象,并且作为视图函数第一个参数传给视图函数。也就是我们经常看到的request参数。在这个

    2022年7月29日
    7
  • 大数据平台架构及主流技术栈

    大数据平台架构及主流技术栈互联网和移动互联网技术开启了大规模生产、分享和应用数据的大数据时代。面对如此庞大规模的数据,如何存储?如何计算?各大互联网巨头都进行了探索。Google的三篇论文GFS(2003),MapReduce(2004),Bigtable(2006)为大数据技术奠定了理论基础。随后,基于这三篇论文的开源实现Hadoop被各个互联网公司广泛使用。在此过程中,无数互联网工程师基于自己的实践,不断完善和丰富H…

    2022年5月29日
    141
  • PyTorch:学习conv1D,conv2D和conv3D「建议收藏」

    PyTorch:学习conv1D,conv2D和conv3D「建议收藏」背景CNN是深度学习的重中之重,而conv1D,conv2D,和conv3D又是CNN的核心,所以理解conv的工作原理就变得尤为重要。在本博客中,将简单梳理一下这三种卷积,以及在PyTorch中的具体实现。参考https://pytorch.org/docs/master/nn.html#conv1dhttps://pytorch.org/docs/master/nn.function…

    2025年7月1日
    2

发表回复

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

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