题目大意
- 就是一个加密字符串,其实就是有括号,字符串会出现这样的格式:k(q),表示字符串q重复了k次,其中q是几个字符,而k是一个数字,范围是0到9.求还原后的字符串的长度…
输入样例
123
输出样例
3
数据范围
- 长度不超过50。所有的括号都是能匹配的,不用判断
答案不会超过2147483647
提示
输入: 输出:
123 3
输入: 输出:
10342(76) 3
解释:
还原后的字符串是:10347676
输入: 输出:
33(562(71(9))) 3
解释:
还原后的字符串是:3567979567979567979
输入: 输出:
0(0) 0
输入: 输出:
1(1(1(1(1(1(1(0(1234567890)))))))) 3
输入: 输出:
1()66(5) 7
解释:
还原后的字符串是:6555555
解题思路
其实这道题就是来枚举每个字符来判断是否在括号内,如果在就重新统计,然后乘上括号前一数字即可还原…再统计即可…
程序如下
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
string a;
int gg(int x,int y)
{
int s=0,t=x,k,q,p;
while(t<=y)
{
if(a[t+1]=='(')//判断是否为括号前一位数
{
k=t,t+=2,q=1,p=0;
while(q!=p)
{
if(a[t]=='(') q++;//排除多重括号的
if(a[t]==')') p++;
t++;
}
t--;
s+=(a[k]-48)*gg(k+2,t-1);//计算括号内的位数
}else s++;
t++;
}
return s;
}
int main()
{
freopen("b.in","r",stdin);
freopen("b.out","w",stdout);
cin>>a;
a=' '+a;//方便计算
printf("%d",gg(1,a.size()-1));
return 0;
}**