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.