一开始以为要把字母也放入栈中,发现不好维护,正确的做法是,
用栈维护左括号的下标,这样遇到右括号时,就知道与它匹配的左括号的下标是多少 。
然后在*****原串****中,对左右下标之间的字符进行操作!
/*
用栈维护左括号的下标,
在左括号下标和右括号下标都能求得的情况下,
在原串上面进行反转操作。
*/
#include <bits/stdc++.h>
using namespace std;
string s;
void solve(string s)
{
stack<int> stk;
for(int i=0;i<s.size();i++)
{
if(s[i]=='(') //如果为左括号
{
stk.push(i);
}
else if(s[i]==')')
{
int l=stk.top(); //记录与该右括号匹配的左括号下标
stk.pop();
int r=i; //记录该右括号的下标
reverse(s.begin()+l,s.begin()+r+1);
}
}
string ans;
for(int i=0;i<s.size();i++)
{
if(s[i]!='('&&s[i]!=')')
{
ans+=s[i];
}
}
cout<<ans<<endl;
return;
}
int main()
{
while(cin>>s)
{
solve(s);
}
return 0;
}