1.问题描述:

括号匹配问题
括号匹配问题

2.算法分析:

括号匹配问题是比较经典的问题。我们可以使用栈这样的数据结构来解决。我们扫描字符串压将‘(’入栈中,然后如果是’)’我们则可以从栈中弹出一个’('来与之匹配,这样就可以解决并保证最近的两个括号相匹配了,根据题目要求我们在记录下匹配的位置即可。
括号匹配问题
因为题目中说答案不唯一就是说位置可以换一下。
比如样例一输出
1 4
2 3
如果我们输出
2 3
1 4
这样子也是可以的。
但是你不能说两个都没匹配上,这就不行了。

源代码:

#include <iostream>
#include <cstdio>
#include <stack>
#include <cstring>
using namespace std;

char s[50005];
int ans[50005];
stack<int> s1;
bool f = true;

int main(){
    gets(s);
    int len = strlen(s);
    for (int i = 0; i < len; i++){
        if (s[i] == '('){
            s1.push(i + 1);
        } else {
            if (!s1.empty()){
            	ans[i + 1] = s1.top();
            	s1.pop();
            } else {
            	f = false;
            	break;
            }
        }
    }
    if (!s1.empty()){
    	f = false;
    }
    if (f){
    	printf("Yes\n");
    	for (int i = 1 ; i <= len ; i++){
    		if (ans[i]) {
    			printf("%d %d\n",ans[i],i);
    		}
    	}
    } else {
    	printf("No\n");
    }
    return 0;
}

大家可以关注一下
www.lyxueit.com.

相关文章: