题目:
分析:
cnt1-4:记录个数。
第一遍遍历,记录【和(的个数。
cnt2:统计需要(的个数,即统计)的个数。
题意不清楚啊,不知道他什么意思?
我的方法会选在最右边的哪个,放弃中间的哪个。
懒得纠结题意在说什么了。
总是,括号问题,我记得自己的做法总是,不单单使用stack,而要使用计数器,或者指针。
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin>>s;
int cnt1=0,cnt2=0,cnt3=0,cnt4=0;
stack<char> st;
//1:[ 个数 2:] 3:( 4: )
for(int i=s.length()-1;i>=0;i--)
{
if(s[i]=='[') cnt1++;
if(s[i]=='(') cnt3++;
}
for(int i=s.length()-1;i>=0;i--)
{
if(s[i]=='[')
{
if(cnt2==0) { st.push(']');st.push('['); }
else { cnt2--; st.push('['); }
}
if(s[i]=='(')
{
if(cnt4==0) { st.push(')');st.push('('); }
else { cnt4--; st.push('('); }
}
if(s[i]==']')
{
if(cnt1==0) { continue; }
else { cnt1--;cnt2++; st.push(']'); }
}
if(s[i]==')')
{
if(cnt3==0) { continue; }
else { cnt3--;cnt4++; st.push(')'); }
}
}
while(!st.empty())
{
cout<<st.top();
st.pop();
}
}