zoukankan      html  css  js  c++  java
  • 括号匹配算法

    括号匹配,算是字符串处理中的一个问题,比较常见,这里就总结一下大体的思路,附赠我的个人代码。

    大体思路:数据结构选用栈,读到左括号时入栈,读到右括号时判断是否匹配,匹配则左括号出栈,非括号字符则继续往下读

    代码如下:

    #include <iostream>
    #include <cstring>
    #include <string>
    #include <stack>
    
    using namespace std;
    class Solution {
    public:
        bool isValid(string s) {
        stack<char> str;
        for(int i=0;i<s.length();i++){
            switch(s[i])
            {
            case '{':
            case '[':
            case '(':str.push(s[i]);break;
            case '}':
            case ']':
            case ')':char temp=s[i];
                     if(str.empty())
                        return false;
                     else if((temp=='}'&&str.top()=='{')||(temp==']'&&str.top()=='[')||(temp==')'&&str.top()=='('))
                        str.pop();
                     else{
                        return false;
                     }
            }
        }
        if(!str.empty()){
            return false;
        }
        else
            return true;
        }
    };
    
    int main()
    {
        Solution s1;
        cout<<s1.isValid("]")<<endl;
    }

    给出另一种写法,思路类似,只是代码形式不同

    bool isValid(string s) {
        vector<char> vc;
        map<char, char> em;
        em['('] = ')';
        em['{'] = '}';
        em['['] = ']';
        for (int i = 0; i < s.length(); ++i) {
            if (s[i] == '(' || s[i] == '{' || s[i] == '[') {
                vc.push_back(em[s[i]]);
            } else if (vc.empty() || vc.back() != s[i]) {
                return false;
            } else {
                vc.pop_back();
            }
        }
        return vc.empty() ? true : false;
    }
  • 相关阅读:
    Codeforces Round #229
    A Funny Game(博弈论)
    01背包模板
    一月24日新生冬季练习赛解题报告H.排列问题
    一月24日新生冬季练习赛解题报告F.棋盘
    POJ 2240Arbitrage
    POJ 3660Cow Contest
    POJ 3259Wormholes
    POJ 1860Currency Exchange
    HDU 4027Can you answer these queries?
  • 原文地址:https://www.cnblogs.com/xinzhiyan/p/7562055.html
Copyright © 2011-2022 走看看