解压字符串
给你一个字符串S,S是已经被加密过的字符串。现在要求你把字符串S还原。字符串S可能会出现这样的格式:k(q),它表示字符串q重复了k次,其中q是0个或多个字符,而k是一个数字,范围是0至9。你只要把k(q)这样的格式全部展开,就能把S还原了,你要输出还原后的字符串的长度。
输入格式:
一行,一个字符串S。字符串S只由‘(’、‘)’、0至9的数字组成,长度不超过50。所有的括号都是能匹配的,不用判断。
输出格式:
一个整数,还原后的字符串的长度。答案不会超过2147483647。
提示:
50%的测试数据,只有一对括号,或者两对括号。
这题用到了栈,模拟即可。
#include<cstdio> #include<iostream> #include<string> #include<stack> using namespace std; int main() { string str; int tmp; cin>>str; stack<int> S;///权重 stack<int> S1;///ans ; S1.push(); ;i<str.length();i++) { if(str[i]=='(') { S.push(str[i-]-'); S1.push(); } else if(str[i]==')') { tmp=S1.top(); S1.pop(); S1.top()+=tmp*S.top(); S.pop(); } ]!='(') S1.top()++; } printf("%d\n",S1.top()); ; }