题意:输入一个合法括号序列,S(1≤|S|≤200000),请你输出每一对括号序列的位置。
合法括号序列定义如下:
1.()本身是合法括号序列
2.如果A是合法括号序列,(A)也是合法括号序列
3.如果A,B是合法括号序列,AB也是合法括号序列
Input
(())()
Output
2 3
1 4
5 6
思路:将前面的前括号压入栈,遇见后括号压出栈
代码送上:
#include<bits/stdc++.h>
using namespace std;
string s;
stack <int> st;
int main(){
cin>>s;
for(int i=0;i<s.size();i++){
if(s[i]=='(') st.push(i+1);
else{
cout<<st.top()<<" "<<i+1<<endl;
st.pop();
}
}
return 0;
}