C++——括号匹配算法

括号匹配算法

利用栈的LIFO的特点,我们可以进行左右括号的匹配,“()【】{}”
在右括号“)】}”左边最近的左括号必须是相对应的“(【{”,否则就不合法
每次匹配一对正确的括号,就要将其出栈,为外层的括号腾出空间。

#include <iostream>
#include <stack>

using namespace std;

    bool isValid(string s) {
        stack <char> sta;
        char c,b;
        int l=s.length();
       for(int i=0;i<l;i++)
              {
                  if(s[i]=='(' || s[i]=='[' || s[i]=='{')
                        {
                            sta.push(s[i]);
                        }
                        else if(s[i]==')')
                        {
                            if(sta.empty())
                                return false;
                            else if(c=sta.top(),c=='(')
                                    sta.pop();
                            else
                                return false;
                        }
                        else if(s[i]==']')
                        {
                              if(sta.empty())
                                return false;
                            else if(c=sta.top(),c=='[')
                                    sta.pop();
                            else
                                return false;
                        }
                        else if(s[i]=='}')
                        {
                              if(sta.empty())
                                return false;
                            else if(c=sta.top(),c=='{')
                                    sta.pop();
                            else
                                return false;
                        }
              }
              if(sta.empty())
                return true;
              else
                return false;
    }
int main()
{
   string s="()[]{}";
   bool b=true;;

   b=isValid(s);
   if(b==true)
   cout << "true";
   else cout << "false";
    return 0;
}

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
括号匹配是指对于一个只包含括号字符包括'{','}','(',')','[',']')的字符串,判断括号是否匹配,即每个左括号是否有对应的右括号。 以下是使用栈来实现括号匹配C++代码: ```cpp #include <iostream> #include <stack> #include <string> using namespace std; bool isMatch(char left, char right) { return (left == '(' && right == ')') || (left == '{' && right == '}') || (left == '[' && right == ']'); } bool isBalanced(string s) { stack<char> st; for (int i = 0; i < s.length(); i++) { if (s[i] == '(' || s[i] == '{' || s[i] == '[') { st.push(s[i]); // 如果是左括号,入栈 } else if (s[i] == ')' || s[i] == '}' || s[i] == ']') { if (st.empty() || !isMatch(st.top(), s[i])) { // 如果是右括号,判断栈顶元素是否匹配 return false; } st.pop(); // 弹出栈顶元素 } } return st.empty(); // 最后判断栈是否为空 } int main() { string s1 = "{[]()}"; string s2 = "{[(])}"; string s3 = "{[()]}{}"; cout << s1 << " is " << (isBalanced(s1) ? "balanced" : "not balanced") << endl; cout << s2 << " is " << (isBalanced(s2) ? "balanced" : "not balanced") << endl; cout << s3 << " is " << (isBalanced(s3) ? "balanced" : "not balanced") << endl; return 0; } ``` 输出: ``` {[]()} is balanced {[(])} is not balanced {[()]}{} is balanced ``` 在代码中,我们定义了一个`isMatch()`函数来判断左右括号是否匹配。然后使用一个`stack<char>`类型的栈来实现括号匹配。遍历字符串,如果是左括号,则入栈;如果是右括号,则判断栈顶元素是否与之匹配,如果匹配则弹出栈顶元素,否则返回`false`。最后,判断栈是否为空,如果为空则说明括号匹配成功,返回`true`,否则返回`false`。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值