给定一个字符串,如abc3(A),表示括号内的A输出3次,结果逆向输出,即AAAcba
如3(A)3(F) 输出FFFAAA
如ab2(cd3(ef)2gh)) 输出hghgfefefedchghgfefefedcba
题目保证数字后面一定是括号,括号一定配对。
#include <iostream>
using namespace std;
string s;
int is_1(char x)
{
return x == '(' || x == '{' || x == '[';
}
int is_2(char x)
{
return x == ')' || x == ']' || x == '}';
}
string scale(string s, int n)
{
string res = "";
for (int i = 0; i < n; i++)
{
res += s;
}
return res;
}
string f(string s, int begin, int end)
{
string res = "";
for (int i = begin; i <= end; i++)
{
if (s[i] >= '0' && s[i] <= '9')
{
int k = 0;
for (int j = i + 1; j <= end; j++)
{
if (is_1(s[j]))
{
k++;
}
else if (is_2(s[j]))
{
k--;
}
if (k == 0)
{
res += scale(f(s, i + 2, j - 1), s[i] - '0');
i = j;
break;
}
}
}
else if (!is_2(s[i]) && !is_1(s[i]))
{
res += s[i];
}
}
return res;
}
int main()
{
cin >> s;
string res = f(s, 0, (int)s.length() - 1);
for (int i = res.length() - 1; i >= 0; i--)
{
cout << res[i];
}
return 0;
}