Valid Parentheses栈和队列--力扣101算法题解笔记

11.3Valid Parentheses栈和队列

题目描述

给定一个只由左右原括号、花括号和方括号组成的字符串,求这个字符串是否合法。合法的定义是每一个类型的左括号都有一个右括号与之一一对应。且括号内的字符串也满足此要求。

输入输出样例

Input :"{ \[\] }()"

Output:true

题解

括号匹配是典型的使用栈来解决的问题。我们从左往右遍历,每当遇到左括号便放入栈内,遇到右括号则判断其和栈顶的括号是否是统一类型,是则从栈内取出左括号,否则说明字符串不合法。

cpp 复制代码
#include <iostream>
#include <stack>
using namespace std;

bool isValid(string s) {
    stack<char> parsed;
    for (int i = 0; i < s.length(); ++i) {
        if (s[i] == '{' || s[i] == '[' || s[i] == '(') {
            parsed.push(s[i]);
        }
        else {
            if (parsed.empty()) {
                return false;
            }
            char c = parsed.top();
            if ((s[i] == '}' && c == '{') ||
                (s[i] == ']' && c == '[') ||
                (s[i] == ')' && c == '(')) {
                parsed.pop();
            }
            else {
                return false;
            }
        }
    }
    return parsed.empty();
}

int main() {
        string s = "{[]}()";

        if (isValid(s)) {
                cout << "true" << endl;
        }
        else {
                cout << "false" << endl;
        }

        return 0;
}
相关推荐
DevOpenClub8 小时前
Markdown、HTML 和 PPT 如何稳定交付:文档转换任务的幂等发布流程
开发语言·前端·c#·html·powerpoint
raindayinrain8 小时前
c++泛型编程
c++·函数模板·类模板·泛型编程
程序员夏洛8 小时前
谈谈你了解的最常见的几种设计模式,说说他们的应用场景
开发语言·python·模板方法模式
OPEN-F8 小时前
C++综合实战:网络编程入门与HTTP客户端
网络·c++·http
小灰灰搞电子8 小时前
Rust+Slint 实现侧滑菜单栏源码分享
开发语言·rust·抽屉式菜单栏
十五年专注C++开发8 小时前
CMake基础:BUILD_INTERFACE 与 INSTALL_INTERFACE 完全解析
c++·cmake·build_interface
JavaEdge.8 小时前
scoped 样式与 data-v-* 属性选择器(写给 Javaer)
开发语言·vue
坐吃山猪8 小时前
JDK 8 到 JDK 21 新特性知识要点
java·开发语言·windows
坐吃山猪8 小时前
【多线程】FutureTask多线程底层实现
java·开发语言·数据库
土司大王8 小时前
LeetCode hot100——缺失的第一个正数
数据结构·算法·leetcode