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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值