首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

检查c++中的有效括号

在C++中检查有效括号可以使用栈的数据结构来实现。以下是一个基本的算法实现:

  1. 创建一个空栈。
  2. 遍历输入的字符串。
  3. 如果遇到开括号('(','{','['),将其压入栈中。
  4. 如果遇到闭括号(')','}',']'),检查栈是否为空。如果为空,说明闭括号没有对应的开括号,返回 false。
  5. 如果栈不为空,弹出栈顶元素并与当前闭括号进行匹配。如果不匹配,返回 false。
  6. 遍历完字符串后,检查栈是否为空。如果不为空,说明有未闭合的开括号,返回 false。
  7. 如果以上条件都满足,返回 true。

以下是一个示例代码:

代码语言:txt
复制
#include <iostream>
#include <stack>

bool isValidParentheses(const std::string& str) {
    std::stack<char> parenthesesStack;

    for (char c : str) {
        if (c == '(' || c == '{' || c == '[') {
            parenthesesStack.push(c);
        } else if (c == ')' || c == '}' || c == ']') {
            if (parenthesesStack.empty()) {
                return false;
            }

            char top = parenthesesStack.top();
            parenthesesStack.pop();

            if ((c == ')' && top != '(') ||
                (c == '}' && top != '{') ||
                (c == ']' && top != '[')) {
                return false;
            }
        }
    }

    return parenthesesStack.empty();
}

int main() {
    std::string str = "((({})))";
    bool isValid = isValidParentheses(str);

    if (isValid) {
        std::cout << "Valid parentheses" << std::endl;
    } else {
        std::cout << "Invalid parentheses" << std::endl;
    }

    return 0;
}

这个算法的时间复杂度是 O(n),其中 n 是输入字符串的长度。

腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):提供弹性计算能力,可根据业务需求灵活调整配置。产品介绍链接
  • 云数据库 MySQL 版:提供稳定可靠的 MySQL 数据库服务。产品介绍链接
  • 云函数(SCF):无服务器函数计算服务,支持多种编程语言。产品介绍链接
  • 对象存储(COS):提供安全、稳定、低成本的云端存储服务。产品介绍链接
  • 人工智能平台(AI Lab):提供丰富的人工智能开发工具和服务。产品介绍链接
  • 物联网通信(IoT Hub):提供稳定可靠的物联网设备连接和数据传输服务。产品介绍链接
  • 区块链服务(BCS):提供一站式区块链解决方案,帮助企业快速搭建区块链应用。产品介绍链接
  • 腾讯会议:提供高清流畅的音视频会议服务。产品介绍链接
  • 腾讯云直播(CSS):提供全球覆盖的低延迟、高并发的直播服务。产品介绍链接
  • 腾讯云音视频处理(VOD):提供音视频上传、转码、剪辑、播放等服务。产品介绍链接
  • 腾讯云安全中心(SSC):提供全面的云安全解决方案,保护云上资产安全。产品介绍链接

请注意,以上只是腾讯云的一些产品示例,其他云计算品牌商也提供类似的产品和服务。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

有效括号

有效括号 难度:简单 来源:20. 有效括号 给定一个只包括 '(',')','{','}','[',']' 字符串,判断字符串是否有效有效字符串需满足: 左括号必须用相同类型括号闭合。...左括号必须以正确顺序闭合。注意空字符串可被认为是有效字符串。...,所以字符串长度一定是偶数; 括号必须是成对出现,这个机制和 Map 这种一一对应映射关系一致,所以可以用 Map 来映射它们之间关系; 当遍历字符串时候,如果是左括号(Map 键)则压入栈...,否则它一定是右括号,则需要用栈最后一位存 Map 键去取对应值然后和当前字符匹配,如果匹配则把栈最后一位键出栈,否则 返回 false 优化:当遍历字符串时候,如果当前字符是右括号,则说明前面一定出现过左括号即栈中一定压入了数据...,所以此时栈长度不应该为 0; 最后,如果一个字符串是括号顺序匹配,那么栈不应该存在字符,即所有被压入栈括号都已经因为匹配到了右括号而被出栈,所以此时栈长度应该为 0; 题解: /**

61730

有效括号

给定一个只包括 '(',')','{','}','[',']' 字符串 s ,判断字符串是否有效有效字符串需满足: 左括号必须用相同类型括号闭合。 左括号必须以正确顺序闭合。...每个右括号都有一个对应相同类型括号。...'()[]{}' 组成 首先要理解题意,什么才是题目中描述有效括号,比如s = "({)[]}", 如下图,把同类型括号单独按顺序拆出来,每种类型括号都是能闭合,但是s并不是合法。...因为最先和'{'闭合是')',违背了 左括号必须用相同类型括号闭合 这个原则。而且上面的这种拆法本身也违反了 左括号必须以正确顺序闭合原则。...class Solution { public: //判断两个字符能否组成合法括号 bool isMatch(char& left, char& right) {

12220
  • 有效括号

    题目描述 给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 字符串,判断字符串是否有效有效字符串需满足: 左括号必须用相同类型括号闭合。 左括号必须以正确顺序闭合。...同时我们使用一个map来保存三种括号括号和闭括号。每次处理当前括号时候,我们判断当前栈顶元素是否是此括号对应括号,是的话,我们将弹出栈顶元素。否则我们将当前括号入栈。...最后,如果栈元素为空,那么可知此字符串是有效字符串。...(parentheses); } } return parenthesesStack.isEmpty(); } 复杂度分析 时间复杂度:O(n),因为我们一次只遍历给定字符串一个字符并在栈上进行...来源 有效括号 | 力扣(LeetCode) 有效括号 | 题解(LeetCode)

    29120

    有效括号

    一、题目描述 给定一个只包括 '(',')','{','}','[',']' 字符串 s ,判断字符串是否有效有效字符串需满足: 1、左括号必须用相同类型括号闭合。...2、左括号必须以正确顺序闭合。 二、题目解析 有效括号满足以下几个条件: 1、字符串长度一定是偶数。...2、括号匹配遵循右括号和最近一个左括号进行匹配,它们匹配成功才有可能是有效括号 3、对于有效括号,它部分子表达式仍然是有效括号,如下图(){[]},其中 () 是有效括号,剩余 {[]...} 也是有效括号。...具体操作步骤如下: 1、 遍历包含括号字符串数组所有元素 2、在遍历过程,如果字符为左括号 ( ,那么就在栈添加对左括号 ( 3、在遍历过程,如果字符为左括号 [ ,那么就在栈添加对左括号

    39230

    有效括号

    在记事本写算法题和在纸上写其实感觉差不多,反正是不能进行调试。...想起某高手的话,写代码要做到“人机合一”,写高级语言时(指的是 C 和 C++)脑海中要知道当前写代码对应反汇编代码,也就是要深入了解编译器对高级语言处理。什么时候能达到这样境界呢?...LeetCode 题库第 20 题——有效括号   我做题习惯跟考试习惯差不多,先找会做,然后再慢慢啃不会。本着一个原则,不用编译器,不去找答案,不会说明基础不牢固,继续补基础。   ...这个题中告诉我们:   1、正确括号包括 括弧、方括号 和 花括号;   2、括号需要 成对 出现;   3、函数传递过来是字符串。...解题答案   这个题就是 数据结构 堆栈应用,还是比较简单

    50820

    有效括号

    @lc app=leetcode.cn id=20 lang=cpp @lcpr version=30202 [20] 有效括号 */ 这段代码是用来验证括号是否有效,下面是注释版本: using...每遇到一个开括号就压入栈,每遇到一个闭括号检查是否与栈顶括号匹配,匹配则继续处理,不匹配则验证失败。...} } // 最后检查栈是否为空,如果为空,则所有括号都正确匹配,返回true return stack.empty(); } 在这个版本,我们使用size_t...这保证了代码是C++98标准兼容。这种方式在处理字符串和数组元素时仍然是常见且有效。 您提供示例字符串 “(1)[]{}” 包含了数字和括号。...} // 检查栈是否为空 return stack.empty(); } 在这个改写版本,我们用连串if和else if语句来识别并处理开括号和闭括号,而忽略了所有非括号字符

    6800

    LeetCode - 有效括号

    因为有些是中文网做,有些是之前英文网做,所以有些题目虽然内容一样,但是题目序号是不一样,我这里采用是中文网题目序号。...,判断字符串是否有效。...有效字符串需满足: 左括号必须用相同类型括号闭合。 左括号必须以正确顺序闭合。 注意空字符串可被认为是有效字符串。...这题从题意上来看很简单,只需要不停判断字符串大中小三类型括号是否能够匹配...遍历字符串,如果是左括号,就入栈;否则就把顶上括号出栈,然后和当前字符匹配看是不是刚好相反括号。 如果到最后栈里面没有任何元素,那么一定是有效括号字符串。

    43710

    每日三题-有效括号、最长有效括号、最小栈

    ‍个人主页: 才疏学浅木子 ‍♂️ 本人也在学习阶段如若发现问题,请告知非常感谢 ‍♂️ 本文来自专栏: 算法 算法类型:Hot100题 每日三题 有效括号 最长有效括号 最小栈...有效括号 解法一 使用栈保存符号左边框 如果出现有边框就与栈顶符号进行匹配 如果匹配失败则return false 注意: 对栈使用要注意判空 class Solution {...stack.isEmpty()) return false; return true; } } 最长有效括号 解法一 遍历 首先判断长度为len字符串是否满足 然后判断长度为...} } return res; } } 解法三 使用动态规划 这就是一个最值问题 设置dp[i] 为以s.charAt(i)结尾字符串最长有效括号长度...使用right保存右括号数量 如果left < right 说明右括号多了,说明这里已经与后面的断开了,后面的不会在这里以及前面的存在匹配直接left == right ==0 如果left

    21330

    C++检查浮点数值有效

    参考链接: C++ copysign() 今天在项目中检查到一个bug,程序会在某些情况下崩溃,最终认定是计算一个比值时,被除数和除数均为零,导致计算结果是个无效值,在后面的代码将使用这个无效值时导致了崩溃...需要对这个结果是否有效进行判断。 ...下面列出 IEEE 推荐对浮点型常用函数,包括特殊值(无穷、无效)判断:  /* These are also declared in Mingw float.h; needed here as...) 求输入数是2多少次幂,返回值对确切结果向0取整;  _nextafter (double x , double y) 输出x对y方向在double精度上下一个值;   _scalb (double...x, long i) 输出x乘以2i次幂结果;  _finite (double) 检查输入是否有效,若为 INT 或 NaN 则返回0,有效数值返回1;  _fpclass (double) 返回一个浮点数分类

    1K20

    LeetCode PHP 有效括号

    友情提示:此篇文章大约需要阅读 2分钟41秒,不足之处请多指教,感谢你阅读。订阅本站 题目 给定一个只包括'(',')','{','}','[',']'字符串,判断字符串是否有效。...有效字符串需满足: 左括号必须用相同类型括号闭合。 左括号必须以正确顺序闭合。 注意空字符串可被认为是有效字符串。...false 示例 5: 输入: "{[]}" 输出: true 解析 这个题解是根据递归 + PHP 字符串功能函数 str_replace 函数来进行字符替换实现,具体实现如下: 将传入字符串进行对应括号组合查找...计算替换次数; 判断替换次数,若没有替换进行判断此字符串是否为空,若为空则代表此字符串符合规则,否者则不符合; 若替换次数不为0,则代表已经替换了一对,将剩余字符串再次传入该函数进行递归操作,直到没有替换次数为止...该字符串或数组是将 subject 全部 search 都被 replace 替换之后结果。返回结果为字符串类型。 代码 <?

    71920

    leetcode:20 有效括号

    然后每次消去一个完整括号,如果能全部消去,证明是有效括号。...如果replace之后字符串不发生变化,或者长度不为0,证明不是有效括号 核心是:必须是找到左右括号相同并且在相邻下标上啊,才能替换成空。...然后在找后面,如果没有重新开始,直到没有括号为止. 问题? 在什么情况下为false? 在括号数量为奇数就为false,或者在执行一次循环后没有匹配就是说还是和之前一样就为false。...s1=s 为什么要加这一句,因为这些有效括号是根据一定规则排列。小中大字符串扫描,如果有变化就赋值给s1为什么呢,因为这代表小中大扫描一定会有变化,为什么?...如果没有的话,就代表这不是按一定规则排列,不是有效字符串阿,或者就是有小中大哪一个多那一个少情况。!就FALSE吧。 let s1=s; 问题? 为什么要加s1呢?

    22720
    领券