zhaobofeng111 @ 2024-01-07 11:12:33
只有56分
后面几个过不了
#include<iostream> #include<cmath> #include<cstring> #include<cstdio> #include<algorithm> #include<ctime> #include<iomanip> #include<string> #include<map> #include<stack> #include<queue> #include<deque> #include<vector> using namespace std; int main(){ string s; stack<char> q; int b[100001]={}; cin>>s; for(int i=0;i<s.length();i++){ if(q.size()!=0){ if(q.top()=='('&&s[i]==')'){ b[i]=1; b[i-1]=1; } if(q.top()=='['&&s[i]==']'){ b[i]=1; b[i-1]=1; } } q.push(s[i]); } for(int i=0;i<s.length();i++){ if(b[i]!=1){ if(s[i]=='('||s[i]==')'){ cout<<'('<<')'; } else{ cout<<'['<<']'; } } else{ cout<<s[i]; } } return 0; }
by WiliestJoseph15 @ 2024-01-17 10:41:37
for(int i=0;i<s.length();i++){
if(q.size()!=0){
if(q.top()=='('&&s[i]==')'){
b[i]=1;
b[i-1]=1;
}
配对的括号并不是一定挨在一起的,如(])这样,所以不能直接标记右括号之前的那一位。可以试试把左括号的下标压入栈,配对的时候再通过下标在字符串中找出来验证
by zhaobofeng111 @ 2024-03-02 10:22:47
收到,万般感谢大佬救我于水火