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/C++八股:(十五)内存对齐、结构体内存对齐
c语言·开发语言·单片机
老约家的可汗2 小时前
C/C++内存管理探秘:从内存分布到new/delete的底层原理
c语言·c++
娇娇yyyyyy2 小时前
QT编程(13): Qt 事件机制eventfilter
开发语言·qt
bcbobo21cn2 小时前
C# byte类型和byte数组的使用
开发语言·c#·字节数组·byte类型
天赐学c语言2 小时前
Linux - 应用层自定义协议与序列/反序列化
linux·服务器·网络·c++
计算机安禾2 小时前
【C语言程序设计】第37篇:链表数据结构(一):单向链表的实现
c语言·开发语言·数据结构·c++·算法·链表·蓝桥杯
阿贵---2 小时前
C++构建缓存加速
开发语言·c++·算法
紫丁香3 小时前
pytest_自动化测试3
开发语言·python·功能测试·单元测试·集成测试·pytest
bearpping3 小时前
java进阶知识点
java·开发语言