题目链接:
传送门
题目描述:
PIPI给你一个合法的括号序列,希望跟你按左括号下标递增顺序给出每对括号在序列中的下标。(下标从1开始)
输入:
多组数据
第一行包括一个只包含’(’,’)'的字符串,保证输入的括号匹配序列合法,长度不超过100000。
输出:
按左括号下标递增顺序给出每对括号在序列中的下标。
样例输入:
(())()()
样例输出:
1 4
2 3
5 6
7 8
提示:
注意输出时的顺序哦~
题目坑点:
有一组数据多了一个(。
c++参考代码:
#include <cstdio>
#include <stack>
#include <string>
#include <cstring>
using namespace std;
struct pos{
int left;
int right;
};
char a[100100];
int main()
{
pos temp1,temp2;
stack<pos>s1;
stack<int>s2;
while(scanf("%s",a)!=EOF)
{
for(int i=strlen(a)-1;i>=0;i--)
{
if(a[i]==')')
s2.push(i+1);
else if(!s2.empty())//有一组数据多出了一个(,不然运行错误33%。
{
temp1.right=s2.top();
temp1.left=i+1;
s1.push(temp1);
s2.pop();
}
}
int j=s1.size();
for(int i=0;i<j;i++)
{
temp2=s1.top();
printf("%d %d\n",temp2.left,temp2.right);
s1.pop();
}
}
return 0;
}