C++实现LeetCode(20.验证括号)

 更新时间:2021年07月13日 11:28:03   作者:Grandyang  
这篇文章主要介绍了C++实现LeetCode(20.验证括号),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

[LeetCode] 20. Valid Parentheses 验证括号

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

An input string is valid if:

  1. Open brackets must be closed by the same type of brackets.
  2. Open brackets must be closed in the correct order.

Note that an empty string is also considered valid.

Example 1:

Input: "()"
Output: true

Example 2:

Input: "()[]{}"
Output: true

Example 3:

Input: "(]"
Output: false

Example 4:

Input: "([)]"
Output: false

Example 5:

Input: "{[]}"
Output: true

这道题让我们验证输入的字符串是否为括号字符串,包括大括号,中括号和小括号。这里需要用一个栈,开始遍历输入字符串,如果当前字符为左半边括号时,则将其压入栈中,如果遇到右半边括号时,若此时栈为空,则直接返回 false,如不为空,则取出栈顶元素,若为对应的左半边括号,则继续循环,反之返回 false,代码如下:

 方法一:

class Solution {
public:
    bool isValid(string s) {
        stack<char> parentheses;
        for (int i = 0; i < s.size(); ++i) {
            if (s[i] == '(' || s[i] == '[' || s[i] == '{') parentheses.push(s[i]);
            else {
                if (parentheses.empty()) return false;
                if (s[i] == ')' && parentheses.top() != '(') return false;
                if (s[i] == ']' && parentheses.top() != '[') return false;
                if (s[i] == '}' && parentheses.top() != '{') return false;
                parentheses.pop();
            }
        }
        return parentheses.empty();
    }
};

方法二:

class Solution {
public:
    bool isValid(string s) {
        int n = s.size();
        if (n % 2 == 1) {
            return false;
        }

        unordered_map<char, char> pairs = {
            {')', '('},
            {']', '['},
            {'}', '{'}
        };
        stack<char> stk;
        for (char ch: s) {
            if (pairs.count(ch)) {
                if (stk.empty() || stk.top() != pairs[ch]) {
                    return false;
                }
                stk.pop();
            }
            else {
                stk.push(ch);
            }
        }
        return stk.empty();
    }
};

到此这篇关于C++实现LeetCode(20.验证括号)的文章就介绍到这了,更多相关C++实现验证括号内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++中set/multiset容器详解(附测试用例与结果图)

    C++中set/multiset容器详解(附测试用例与结果图)

    set/multiset属于关联式容器,底层结构是用二叉树实现,下面这篇文章主要给大家介绍了关于C++中set/multiset容器的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • C语言游戏之猜数字

    C语言游戏之猜数字

    这篇文章主要为大家详细介绍了C语言游戏之猜数字,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • OpenGL绘制三次Bezier曲线

    OpenGL绘制三次Bezier曲线

    这篇文章主要为大家详细介绍了OpenGL绘制三次Bezier曲线,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C++标准模板库函数sort的那些事儿

    C++标准模板库函数sort的那些事儿

    sort函数是标准模板库的函数,已知开始和结束的地址即可进行排序,可以用于比较任何容器(必须满足随机迭代器),任何元素,任何条件,执行速度一般比qsort要快
    2013-09-09
  • C和C++中的基本数据类型的大小及表示范围详解

    C和C++中的基本数据类型的大小及表示范围详解

    这篇文章主要介绍了C和C++中的基本数据类型的大小及表示范围详解,基本数据类型有int、long、long long、float、double、char、string,正文有详细介绍,欢迎参考
    2018-01-01
  • c实现linux下的数据库备份

    c实现linux下的数据库备份

    本文给大家简单介绍下c实现linux下的数据库备份的方法和具体的源码,十分的实用,有需要的小伙伴可以参考下。
    2015-07-07
  • C语言编程C++动态内存分配示例讲解

    C语言编程C++动态内存分配示例讲解

    这篇文章主要介绍了C语言编程C++动态内存分配示例讲解,为什么存在动态内存分配?本文通过动态内存介绍及常见内存错误等示例来为大家讲解
    2021-09-09
  • Ubuntu16.04下配置VScode的C/C++开发环境

    Ubuntu16.04下配置VScode的C/C++开发环境

    这篇文章主要介绍了Ubuntu16.04下配置VScode的C/C++开发环境的教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • C语言单链表实现图书管理系统

    C语言单链表实现图书管理系统

    这篇文章主要为大家详细介绍了C语言单链表实现图书管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C++根据传入的函数指针来解析需要的参数(推荐)

    C++根据传入的函数指针来解析需要的参数(推荐)

    C++可以根据传入的函数指针,获取自己需要的参数类型,然后根据参数源中获取需要的参数,具体实现方式大家参考下本文
    2018-05-05

最新评论