【普及模拟】解压字符串
发布日期:2021-05-07 22:49:32 浏览次数:24 分类:原创文章

本文共 892 字,大约阅读时间需要 2 分钟。

给你一个字符串S,S是已经被加密过的字符串。现在要求你把字符串S还原。字符串S可能会出现这样的格式:k(q),它表示字符串q重复了k次,其中q是0个或多个字符,而k是一个数字,范围是0至9。你只要把k(q)这样的格式全部展开,就能把S还原了,你要输出还原后的字符串的长度。


Input

一行,一个字符串S。字符串S只由‘(’、‘)’、0至9的数字组成,长度不超过50。所有的括号都是能匹配的,不用判断。

Output

一个整数,还原后的字符串的长度。答案不会超过2147483647。

Sample Input

123

Sample Output

3


也是一个模拟,我用了数组。。。

#include<cstring>#include<string>#include<iostream>#include<cstdio>using namespace std;int c,C[10001],pt[10001],L[10001];int main(){   	freopen("b.in","r",stdin);	freopen("b.out","w",stdout);	string s;	cin>>s;	s="1("+s+")";	for(int i=0;i<s.size();++i){   		if(s[i]=='('){      //有左括号的话			pt[c]--;   //这一层普通的数-1			c++;       //多建一层			C[c]=s[i-1]-48;  //这一层该乘的数记录一下		}		else if(s[i]==')'){     //有右括号			L[c]=(pt[c]+L[c+1])*C[c];  			//这一层的总数目等于(这一层普通的数+这一层里面折叠的数)*这一层该乘的数			pt[c]=0;  //归一下0			--c;      //退出这层。		}		else pt[c]++;  //这层普通的数+1	}	printf("%d",L[1]);  //输出第一层	fclose(stdin);	fclose(stdout);}
上一篇:【普及模拟】楼梯
下一篇:【普及模拟】交换

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年04月14日 02时05分17秒