Hihocoder-1458 Parentheses Matching

Parentheses Matching

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述
Given a string of balanced parentheses output all the matching pairs.

输入
A string consisting of only parentheses ‘(’ and ‘)’. The parentheses are balanced and the length of the string is no more than 100000.

输出
For each pair of matched parentheses output their positions in the string.

样例输入
(())()()
样例输出
1 4
2 3
5 6
7 8

题意:

本题题意是要求输出满足括号匹配的位置,并且要求将下标从小到大排列

思路:

本题需要用到结构体及栈,我们可以将左括号的下标放入栈中如果找到一个右括号则当前栈顶的左括号和当前的右括号匹配,并记录下当前坐标放入结构体中最后再对结构体进行排序,得出最终的结果。

AC代码如下:

#include<iostream>
#include<stack>
#include<cstring>
#include<algorithm>
using namespace std;
char a[100005];
struct node{
	int a, b;
}s1[100005];

bool cmp(node c, node d)
{
	return c.a < d.a;
}

int main()
{

	while (cin>>a)
	{	
		int k = 0;
		stack<int>s;
		int m = strlen(a);
		for (int i = 0; i < m; i++)
		{
			if (a[i]== '(')
				s.push(i+1);//下标从1开始
			else
			{
					s1[k].a=s.top();
					s1[k++].b = i + 1;
					s.pop();//弹出栈顶元素
			}
		}
		sort(s1, s1 + k, cmp);
		for (int i = 0; i < k; i++)
		{
			cout << s1[i].a << " " << s1[i].b << endl;
		}
	}

	return 0;
}

发布了40 篇原创文章 · 获赞 10 · 访问量 2575

猜你喜欢

转载自blog.csdn.net/lsdstone/article/details/100611126