本文主要是介绍1354:括弧匹配检验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
【解题思路】
遍历字符串,左括号入栈,遇到右括号时,看栈顶括号与右括号是否能配对。如果两个括号都是小括号或中括号,那么二者配对,左括号出栈。否则括号不匹配。
如果遍历到右括号时,发现栈空,那么存在右括号无法匹配。
如果遍历结束时,栈不为空,那么存在左括号无法匹配。
【题解代码】
解法1:用数组模拟栈
#include<bits/stdc++.h>
using namespace std;
int main()
{char s[260], stk[260];scanf("%s", s);int top = 0, len;len = strlen(s);for(int i = 0; i < len; ++i){if(s[i] == '(' || s[i] == '[')//左括号入栈 stk[++top] = s[i];else if(s[i] == ')' || s[i] == ']'){if(top == 0 || s[i] == ')' && stk[top] != '(' ||s[i] == ']' && stk[top] != '[')//栈空或括号不配对 {printf("Wrong");//无法配对 return 0;}elsetop--;}}if(top == 0)//如果栈不空,则无法配对 printf("OK");elseprintf("Wrong");return 0;
}
解法2:使用栈(C++ STL)
#include<bits/stdc++.h>
using namespace std;
int main()
{string s;cin >> s;stack<char> stk;for(int i = 0; i < s.length(); ++i){if(s[i] == '(' || s[i] == '[')//左括号入栈 stk.push(s[i]);else if(s[i] == ')' || s[i] == ']'){if(stk.empty() || s[i] == ')' && stk.top() != '(' ||s[i] == ']' && stk.top() != '[')//栈空或括号不配对 {cout << "Wrong";//无法配对 return 0;}elsestk.pop();}}if(stk.empty())//如果栈不空,则无法配对 cout << "OK";elsecout << "Wrong";return 0;
}
这篇关于1354:括弧匹配检验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!