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;
}
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • PV操作——生产者和消费者

    PV操作——生产者和消费者

  • html5空白站位符号,空格代码(隐形空白符号)

    html5空白站位符号,空格代码(隐形空白符号)CSS的空间处理一、空格规则浏览器通常会忽略HTML代码中的空白。上面是一行HTML代码,文本的前面、里面和后面各有两个空格。为了便于识别,这里使用半圆形符号来表示空间。浏览器的输出如下。你好世界如您所见,文本前后的空格将被忽略,内部连续的空格将只被算作一个。这是浏览器处理空格的基本规则。如果希望空格按原样输出,可以使用前置标签。另一种方法是用HTML实体来代替表示空格。二、空格字符处理空格的HT…

  • 提高 Activity 跳转速度

    提高 Activity 跳转速度从一个页面跳转到另外一个页面,这在Android中是很常见的操作;有的页面跳转是瞬间打开,有的是会微微钝一下才打开;或者在页面里弹出一个Dialog弹框,明明已经调用完了show()方法,但弹框没马上弹出来,延迟了一百多毫秒才显示出来,这样给人的体验就很不好了。为什么会出现这种情况呢?页面跳转迟钝和弹框的展示延迟的原因都一样,基本分为两大类。第一类就是看看是否在UI线程左耗时操作,这个经常是数据方面的问题,比如说要从数据库里面查询数据,或者说对数据做了一些复杂逻辑的操作,例如要对集合中的数据,

  • Burpsuite教程(一)Burpsuite 火狐谷歌浏览器抓包教程

    Burpsuite教程(一)Burpsuite 火狐谷歌浏览器抓包教程1.1Web抓包火狐抓包环境需求:火狐浏览器代理插件1.打开测试工具BurpSuite,默认工具拦截功能是开启的,颜色较深,我们点击取消拦截。下图取消拦截状态,数据包可以自由通过:2.按下图顺序点击选显卡来到代理设置3.可以看到默认的代理设置情况,本地代理地址:127.0.0.1,代理端口8080。如果前面没有勾选一定要选择勾选。工具代理设置完毕。4.证书安装,浏览器输输入http://burp/,点击图示位置下载证书5配置证书,打开浏览器并导入证书火狐浏览器开打开证

  • VS2010 旗舰版序列号

    VS2010 旗舰版序列号YCFHQ-9DWCY-DKV88-T2TMH-G7BHP转载于:https://www.cnblogs.com/canyuexingchen/p/3229530.html

  • Flowable 6.7.0版本新功能特性

    Flowable 6.7.0版本新功能特性Flowable6.7.0版本主要增强的是BPM异步功能:1、实现了全局锁定机制,以更好地支持在具有多个Flowable引擎的设置中使用异步执行器2、添加了对多实例变量聚合的支持3、当多实例是一个自动步骤或一系列自动步骤时,为异步多实例使用添加了一个优化标志。如果设置,引擎将大大降低资源消耗,并删除乐观锁定异常,通常会提高性能4、从Task监听器抛出的异常不再包含在FlowableException中5、在此版本中,已升级到SpringBoot2.5.4和Spri

发表回复

您的电子邮箱地址不会被公开。

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