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;
}
相关推荐
_李小白2 分钟前
【C++学习笔记】新特性之inline变量
c++·笔记·学习
桀人23 分钟前
C++——模板初阶(收录在专栏C++入门到精通)
开发语言·c++
一直有一个ac的梦想30 分钟前
cmu15445 2025fall lec 18 transactions with two-phase lock
java·开发语言·数据库
JAVA社区1 小时前
Java进阶全套教程(四)—— SpringMVC框架详解
java·开发语言·spring·面试·职场和发展
Lumbrologist1 小时前
【C++】零基础入门 · 第 2 节:变量、基本数据类型与输入输出
java·开发语言·c++
XX風1 小时前
CMake / Make / Ninja / MSVC / GCC / Clang / MSBuild —— 完整体系化理解
c++
码完就睡1 小时前
C语言——动态内存
c语言·开发语言
xyq20241 小时前
Java 数组
开发语言
Peter·Pan爱编程1 小时前
10. new_delete 不是 malloc_free 的包装
c++·人工智能·算法
雨辰AI1 小时前
人大金仓 V9 生产级专用监控大盘(含 120 + 指标 + 告警规则 + 一键导入)
java·开发语言·数据库·mysql·政务