解压字符串
jzoj 1519
题目大意:
有一串压缩过的字符串,将有重复的压缩成了s(~~)的形式(s是一位数,例子:123123123压缩成‘3(123)’),现在要你解压出来,然后输出长度
样例输入
123
样例输出
3
数据范围限制
字符串长度不超过50
提示#1:
提示#2:
50%的测试数据,只有一对括号,或者两对括号。
解题思路:
用一个递归函数来解开括号,然后一个一个解就行了
代码:
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
using namespace std;
string str;
int js(int x,int y)
{int sum=0,i=x,k,s,ys;while (i<=y){if (str[i+1]!='(') sum++;//判断是否是普通数字else{k=i;i+=2;s=1;ys=0;while (s!=ys)//寻找匹配的括号{if (str[i]=='(') s++;if (str[i]==')') ys++;++i;}i--;sum+=(str[k]-48)*js(k+2,i-1);//递归}++i;}return sum;
}
int main()
{cin>>str;str=' '+str;printf("%d",js(1,str.size()-1));//计算结果
}