Atcoder beginner Contest 307 D - Mismatched Parentheses
作者:
大雪球hh
,
2023-06-25 12:10:53
,
所有人可见
,
阅读 138
D - Mismatched Parentheses
该题的题意是输入一个字符串,然后把字符串中被括号包围的一段全部删掉(包括两个括号),
思路
首先找到匹配的括号,关于括号匹配的问题经常会遇到栈,这里用栈来维护这个括号的匹配,
当遇到一个左括号,把左括号对应的下标放到栈中,然后当遇到一个右括号的时候,去栈中
查找是不是存在存在左括号,如果存在就把和左括号对应的右括号下标记录下来,最后的时候
输出的时候,左括号到右括号这一段,跳过
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
string str;
cin >> str;
stack<int> stk;
vector<int> r(n+1,-1);
for(int i = 0; i < n; i ++){
if(str[i] == '('){
stk.push(i);
}
else if(str[i]==')'){
if(!stk.empty()){
r[stk.top()] = i;
stk.pop();
}
}
}
for(int i = 0; i < n; i ++){
if(r[i] != -1){
i = r[i];
}
else cout << str[i];
}
}