字符串解码(猿辅导笔试题数箱子)
可以申请两个栈,一个存放数字一个存放字符。本题我们直接申请一个栈,数据类型设定为pair<int,string>。遍历原字符串时,遇到数字则计算保存到num中,遇到左括号 [ 则入栈,入栈后,将num置0,将字符串清空;遇到字符则进行拼接保存至res中,遇到右括号 ] 则出栈。在出栈时,首先得到栈顶数字n,然后得到栈顶字符串str,拼接的重复次数为栈顶数字指定的大小,拼接的方式为str=str+res。
代码如下:
class Solution {
public:string decodeString(string s) {stack<pair<int,string>>st;string res="";int num=0;for(int i=0;i<s.size();i++){if(s[i]-'0'>=0&&s[i]-'0'<=9){num*=10;num+=s[i]-'0';}else if(s[i]=='['){st.push(make_pair(num,res));num=0;res="";}else if(s[i]==']'){int n=st.top().first;string str=st.top().second;st.pop();for(int j=0;j<n;j++)str=str+res; //字符串重复多次,多次拼接res=str;}elseres+=s[i];}return res;}
};
做完字符串解码后,看猿辅导的一道笔试题,题目的具体故事背景记不清了,大概问题是:
输入一个只包含 [ 、] 、数字(1-9)的字符串。[ ]表示一个箱子,[ ]3表示3个箱子,[ ]内部可以嵌套更多的箱子,即大箱子装小箱子。求字符串最终对应的箱子数量。
比如:[ ] [ [ ] [ ] [ ]2 ]3 表示 1+(1+1+2)*3+3=16,则最终的箱子数为16。
这道题就类似于字符串解码,当然也可以用递归的方法做(可以自己尝试,相比较于字符串解码的思想要复杂一点),分析这道题,首先我们从后向前看,对于遇到的字符,如果是数字,首先箱子总数要加上该数字num。然后若这个数字接下来对应的箱子中有嵌套箱子,则需要用该数字乘以嵌套中的箱子数量,遍历完当前的最外层箱子,接下来就是判断前面是否还有大箱子,有则加上该箱子的总数。
我们用栈来做:首先遇到数字,我们保存至num中(注意num初始化为1,因为没有数字默认为1),然后遇到 ] 时,我们将num入栈,然后将num置1,遇到 [ 则出栈,获取栈顶数字n,然后判断此时栈是否为空,不为空,则说明我们还在计算某个大箱子内嵌套的箱子总数,则temp+=n;为空则说明我们遍历完一个完整的大箱子了,此时总数res+=n*temp+n;然后将temp置0,方便接下来继续遍历计算。结合代码看就会明白计算规则。
代码如下:
#include<iostream>
#include<string>
#include<stack>
using namespace std;
int res = 0;
void track(string s)
{stack<int>st;int num = 1;int temp = 0;for (int i = s.size() - 1; i >= 0; i--){if (s[i] - '0' >= 0 && s[i] - '0' <= 9) {num = s[i] - '0';}else if (s[i] == ']') {st.push(num);num = 1;}else if (s[i] == '[') {int n = st.top();st.pop();if (st.empty()){res += n * temp + n; //外层箱子数为n,内部装的箱子数为temptemp = 0; //置0方便计算接下来遇到新的含嵌套的箱子}elsetemp += n; //计算含嵌套的箱子中装了多少个箱子}}
}
int main() {string s;cin >> s;track(s);cout << res << endl;return 0;
}
字符串解码(猿辅导笔试题数箱子)相关推荐
- 【leetcode】第394题:字符串解码(华为笔试题)
题目:给定一个经过编码的字符串,返回它解码后的字符串. 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次.注意 k 保证为正整数. ...
- 90 个名企笔试题和算法题
名企笔试 名企笔试:美团2016招聘笔试(股票交易日) 名企笔试:搜狐2016招聘笔试题(扎金花) 名企笔试:凤凰网2015招聘(二分查找) 名企笔试:4399游戏校招笔试题(快速排序) 名企笔试:蘑 ...
- 搬:90 个名企笔试题和算法题
名企笔试 名企笔试:美团2016招聘笔试(股票交易日) 名企笔试:搜狐2016招聘笔试题(扎金花) 名企笔试:凤凰网2015招聘(二分查找) 名企笔试:4399游戏校招笔试题(快速排序) 名企笔试:蘑 ...
- 猿辅导校招技术类笔试题
猿辅导校招技术类笔试题 2019年 大巴车 这道题还挺简单的,题干也写了,数组按块翻转,块内保持不变 import java.util.*; public class Main {public sta ...
- 猿辅导2019校招技术类笔试题(题目出的很好)
1.猿辅导公司某研发小组一共有 12 名同学,其中 9 人能做后端开发,6 人能做前端开发.现在要抽调 4 名同学成立项目小组,负责公司的一项"机密"项目.其中 2 名同学做后端开 ...
- 猿辅导python面试题_猿辅导面试内容是什么?面试官会问什么问题?
前排提示:B站有视频版,不想看文字的同学可以直接点链接哦- 初试:成都猿辅导-辅导老师面试经验分享_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com 岗前三天培训: ...
- 大厂常见笔试题 滑动窗口内数的和
大厂常见笔试题,我以为出一个很难的题,结果出了一个基础题, 给你一个大小为n的整型数组和一个大小为k的滑动窗口,将滑动窗口从头移到尾,输出从开始到结束每一个时刻滑动窗口内的数的和. 样例 对于数组 [ ...
- Trilogy公司的笔试题:根据指定规则用最少的步骤将数转为1
Trilogy公司的笔试题: 如果n为偶数,则将它除以2,如果n为奇数,则将它加1或者减1.问对于一个给定的n,怎样才能用最少的步骤将它变到1. 例如:n=11: ① ++n -> ...
- java字符串笔试题_五道Java常见笔试题及答案汇总
1.String和StringBuffer的区别? 答:Java平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据.这个String类提供了数 ...
最新文章
- 聊聊spring cloud gateway的GlobalFilter
- 整合SharePoint MOSS 和SQL Server 2005 reporting service(一)
- CF1592E Bored Bakry(二进制+前缀异或和)
- C++通过原子变量代替互斥量
- 金蝶k3财务接口_金蝶云为企业成长而生,让工作更高效!
- wampserver下配置虚拟主机 实现多站点支持
- 解决HuggingFace加载预训练模型时报错TypeError: expected str, bytes or os.PathLike object, not NoneType
- linux 添加新的系统调用,如何在Linux中添加新的系统调用
- arcgis图层叠加不匹配
- 《完美软件》读书笔记10:有关测试的主要误区
- Feedforward Deep Networks(要点)
- hibernate 里面 mysql dialect 配置
- LC60 Permutation Sequence
- 一种使用Python计算可达矩阵的简单方法
- 关于Ubuntu python程序利用lixb264生成h264格式的视频相关问题
- 天池大数据竞赛-河北高校邀请赛——二手车交易价格预测-初赛第22名
- 解构ODL:从代码到架构设计
- 2010-01-22 | 占豪收评:牛市继续还是进入熊市?
- AI绘画火了!一文看懂背后技术原理
- Resharper快捷键使用