68分求调
查看原帖
68分求调
1498238
cao__120楼主2024/12/16 21:43
#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
struct D{
	ll id;//STL栈没自带下标访问,id作为下标方便记录 
	char value;
};
stack<D> d;
string s;
bool ispair[1000];//每个元素是否被配对 
map<char,char> pa;
int main(){
	cin.tie(0);cout.tie(0); 
	cin>>s;
	pa[')']='(';pa['(']=')';pa[']']='[';pa['[']=']';//方便匹配
	for(int i=0;i<s.size();i++){
		if(!d.empty()){
			if(s[i]==')'||s[i]==']'){//右括号才能进行配对 
				if(d.top().value==pa[s[i]]){//栈顶有配对符号,弹出栈顶并将两个括号标记为已配对 
					ispair[i]=ispair[d.top().id]=1;
					d.pop();
					continue;
				}
			}
		}
		d.push(D{i,s[i]});
	}
	for(int i=0;i<s.size();i++){
		if(!ispair[i]){
			if(s[i]==']'||s[i]==')'){
				cout<<pa[s[i]]<<s[i];//输出顺序有差别 
			}else{
				cout<<s[i]<<pa[s[i]];
			}
		}else{
			cout<<s[i];//已配对直接输出 
		}
	}
	return 0;
}
2024/12/16 21:43
加载中...