PIPIOJ 1036: 括号匹配

题目链接:
传送门

题目描述:
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;
}

猜你喜欢

转载自blog.csdn.net/qq_46139801/article/details/115276974