• LeetCode--Valid Parentheses


    LeetCode--Valid Parentheses

    Question

    Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.

    The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.

    这个题目的思想就是利用实现一个函数:int find_match();

    • 当函数返回值为-1的时候,表明在堆中没有找到匹配的括号,那么需要将新的括号压入堆中;
    • 当函数返回值为0的时候,表明在堆的最顶端找到了匹配的括号,那么需要将堆中的括号弹出;
    • 当函数返回值为1的时候,表明在堆的其他位置找到了匹配的括号,那么括号匹配失败退出;

    作者用map实现了括号的映射,便于计算是否匹配;用vector模拟stack,因为vector比较熟悉吧。

    具体实现

    #include <iostream>
    #include <map>
    #include <vector>
    
    using namespace std;
    
    
    class Solution {
    public:
        bool isValid(string s) {
            init();
            for (int i = 0; i < s.length(); i++) {
                int value = bracket2int.find(s[i])->second;
                int res = find_match(value);
                if (res == -1)
                    brackets.push_back(value);
                else if (res == 0)
                    brackets.pop_back();
                else
                    return false;
    
            }
            if (brackets.size() != 0)
                return false;
            else
                return true;
        }
        int find_match(int input) {
            int index = -1;
            for (int i = brackets.size() - 1; i >= 0; i--) {
                if (brackets[i] + input == 0) {
                    index = i;
                    break;
                }
            }
            // 堆最顶端匹配
            if (brackets.size() != 0 && index == brackets.size() - 1)
                return 0;
            //没有找到匹配
            else if (index == -1)
                return -1;
            //其他位置找到匹配
            else
                return 1;
        }
        void init() {
            bracket2int.insert(map<char, int>::value_type('(', 1));
            bracket2int.insert(map<char, int>::value_type(')', -1));
            bracket2int.insert(map<char, int>::value_type('[', 2));
            bracket2int.insert(map<char, int>::value_type(']', -2));
            bracket2int.insert(map<char, int>::value_type('{', 3));
            bracket2int.insert(map<char, int>::value_type('}', -3));
        }
    private:
        map<char, int> bracket2int;
        vector<int> brackets;
    };
    
    
    int main() {
        Solution* solution = new Solution();
        string str = "";
        if (solution->isValid(str))
            cout << "True" << endl;
        else
            cout << "False" << endl;
        return 0;
    }
    
  • 相关阅读:
    springcloud 入门 11 (Hystrix Dashboard)
    springcloud 入门 10 (eureka高可用)
    springcloud 入门 9 (消息总线)
    springboot 学习之路 20 (整合RabbitMQ)
    springcloud 入门 8 (config配置中心)
    springcloud 入门 7 (zuul路由网关)
    springcloud 入门 6 (断路器hystrix)
    springcloud 入门 5 (feign源码分析)
    springcloud 入门 4 (rebbon源码解读)
    Java实现多线程下载 URL以及URLConnection
  • 原文地址:https://www.cnblogs.com/zhonghuasong/p/6424892.html
Copyright © 2020-2023  润新知