LintCode-分治-Expression Expand
来源:互联网 发布:oracle12c新建数据库 编辑:程序博客网 时间:2024/06/06 08:27
点此直接进入题目
解题思路:首先题目要求是给一个字符串,然后展开。展开是将[ ]内的字符串进行展开,而且展开的次数是,[ ]前的数字。大体思路有了以后进行细化。一个字符串它可以[ ]里面包着很多[ ],我们可以对最里面的[ ]的字符串进行展开。例如:3[2[ad]3[pf]]xyz,先对最里面的字符串进行展开,得到3[adadpfpfpf]xyz,然后在展开得到adadpfpfpfadadpfpfpfadadpfpfpfxyz。
解题过程:给定一个字符串s,定义一个字符串a,利用atoi判断s的某个字符是否是数字。利用while语句,条件是s的长度不为0,然后从s第一个字符开始判断,若该字符不是数字,则将该字符加到a的末尾。否则,利用atoi将该字符或多个字符转化成数字num,stringsteam将该数字转化成字符串,求得该数字位数,然后从s的第一位字符期删除相应数量的字符,然后将[ ]内的字符赋值给新的字符串aa,并且在s中删除相应字符串。aa内可能会有[],所以对aa进行递归。然后将aa递归结果赋值给b,然后将b加到字符串a后面num次。最后返回a.
代码实现:string expressionExpand(string &s){
string a;
while(s.length())\\s长度不为0
{
int num=atoi(s.c_str());\\判断s的第一位是不是数字。
stringstream ss;
ss<<num;
string b=ss.str();\\求得数字长度
if(num||(b.length()==1&&s[0]=='0'))\\s的前几位是数字的情况
{
s.erase(0,1+b.length())\\删除s的前几位数字以及数字后面的‘[‘符号。
int count=1;
string aa;
while(1)
{
if(s[0]=='[')
{
count++;
}
else if(s[0]==']')
{
count--;
}
if(count==0) break;
else{
aa+=s[0];
s.erase(0,1);
}
}\\将s的[ ]内字符串赋值给aa
b=expressionExpand(aa);\\aa进行递归,并将结果给b
while(num)\\对b进行扩展
{
a+=b;
num--;
}
}
else{\\若s的首位不是数字的话,就直接将字符加到a后面,并且删除该字符
if(s[0]!='['&&s[0]!=']') a+=s[0];
s.erase(0,1);
}
}
return a;
}
注意事项:要注意字符串的用法,尤其是删除操作,string转化int操作,而且思路要清晰。而且要注意字符串内0是字符,转化后还是0,但是此时要对0后面括号内的字符展开0次,但是若该字符不是数字,转化得到的也是0,但此时不对后面字符展开,而且该字符后面也没有括号[],这里需要注意。
个人总结:我在字符串是0的那个地方栽了一次,没想到那点上去。
- LintCode-分治-Expression Expand
- lintcode(575)Expression Expand
- lintcode--Expression Expand
- 【LintCode】Expression Expand
- Expression Expand---lintcode
- LintCode:M-Expression Expand
- lintcode :expression expand using C++
- Expression Expand
- Expression Expand
- Expression Expand
- Expression Expand
- Lintcode - Expression Evaluation
- Lintcode - Expression Evaluation
- [LintCode] Expression Evaluation
- Lintcode - Convert Expression to Reverse Polish Notation
- Lintcode - Convert Expression to Polish Notation
- [LintCode] Convert Expression to Polish Notation
- [LintCode]Convert Expression to Reverse Polish Notation
- Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushM
- PHP PDO+MySQL实现登录注册页面
- hibernate约束文件的导入步骤
- HTML5 postMessage 跨域窗口信息传递
- 2017年09月23日普级组 数列
- LintCode-分治-Expression Expand
- COMMTIMEOUTS结构
- SpringMVC学习笔记(3)-----表单处理
- android-什么是GlibC
- cenos 6.8 安装samba4.7
- C++单例模式(自动释放实例)
- 玻尔兹曼机通俗理解
- VsCode插件整理
- 关于echarts中的关系图,力导向图的编写