首页 > 其他分享 >有效的括号

有效的括号

时间:2023-06-01 09:33:07浏览次数:24  
标签:遍历 false 有效 st 括号 字符串 匹配

 

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


 

 

一个新的用法:

  char c : s 是一个 C++11 特性的语法,表示对字符串 s 进行遍历,对于字符串中每个字符 c,都执行一次代码块中的操作。它在范围 for 循环(range-based for loop)中很常用。

具体来说,这个语法相当于以下的写法:

 

for (auto it = s.begin(); it != s.end(); ++it) {
    char c = *it;

    // 代码块中的操作
}

   

  在遍历字符串时,使用 auto 自动推导迭代器类型,迭代器类型为 string::iterator,也可以显式指定迭代器类型,即 string::iterator c。在代码块中,我们可以直接使用 c 来访问当前字符。

例如,在这个问题中,我们可以使用 for (char c : s) 来遍历字符串 s 中的每个字符,执行括号匹配的操作。

 


 

 

这是一个经典的括号匹配问题,可以使用栈来解决。具体地,从左到右遍历字符串的每个字符,如果是左括号,则将其压入栈中;如果是右括号,则取出栈顶元素,判断其是否与当前右括号匹配,如果匹配则继续遍历,否则返回false。如果遍历完字符串后栈为空,则返回true,否则返回false。

#include <iostream>
#include <stack>
#include <string>

using namespace std;

bool isValid(string s) {
    stack<char> st; // 定义一个栈,用来存放左括号

    for (char c : s) {
        if (c == '(' || c == '[' || c == '{') { // 如果是左括号,则将其压入栈中
            st.push(c);
        } else if (c == ')' || c == ']' || c == '}') { // 如果是右括号,则取出栈顶元素,并判断是否匹配
            if (st.empty()) { // 如果栈为空,则说明没有左括号匹配
                return false;
            }

            char top = st.top(); // 取出栈顶元素

            if ((c == ')' && top != '(') || (c == ']' && top != '[') || (c == '}' && top != '{')) {
                // 如果当前右括号与栈顶元素不匹配,则返回false
                return false;
            }

            st.pop(); // 如果匹配,则将左括号弹出栈
        }
    }

    return st.empty(); // 如果遍历完字符串后,栈为空,则返回true,否则返回false
}

int main() {
    string s = "()[]{}"; // 初始化一个字符串
    bool valid = isValid(s); // 判断字符串是否有效
    cout << valid << endl; // 输出结果,期望输出为1(即true)

    return 0;
}

  

 

 

 

 

 

 

 

 

标签:遍历,false,有效,st,括号,字符串,匹配
From: https://www.cnblogs.com/Bingley-Z/p/17447995.html

相关文章

  • 以高度的精度提高无监督领域适应的有效性
    文章的主要内容同时,提出了一种改进的主动学习查询策略,以准确选择目标域中新增加的健康类别样本来辅助模型训练,解决标签域扩展的问题。近年来,一些研究人员利用样本选择算法在目标域中提取信息量大的样本来辅助模型训练,用于提高无监督模型的诊断性能。该方法首先利用UDA模型学习领......
  • 小括号() 大括号{}在linux shell中的作用
    1.小括号()a.另开子shell运行命令比如(ls;ls-h;pwd);b.参数替换,类似于``;2.大括号{} a.参数收拢比如ls{a,b,c}.txt{1...3}.txtb.在当前shell中执行命令{ls;pwd;},需要注意左大括号与第一条命令有空格,最后一条命令后带分号。3.小括号嵌套两层(())  ......
  • 代码随想录算法训练营第六天|哈希表理论基础、242.有效的字母异位词两个数组的交集、2
    242.有效的字母异位词力扣题目链接(opensnewwindow)给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。示例 1:输入:s="anagram",t="nagaram"输出:true示例2:输入:s="rat",t="car"输出:false说明: 你可以假设字符串只包含小写字母。思路:......
  • leetcode: 有效的括号
    题目描述给定一个只包括'(',')','{','}','[',']' 的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。示例1:输入:"()"输出:true示例2:输入:"()[]{}"输......
  • 武汉星起航:亚马逊高效选品指南分享,助力卖家有效提升销量
    在亚马逊平台上选择合适的产品是一个关键的成功因素。高效选品不仅可以帮助亚马逊卖家实现销售增长,还可以降低竞争压力并提高盈利能力。武汉星起航将为亚马逊卖家提供一些高效选品的策略和指南。市场研究和分析:在选择产品之前,进行充分的市场研究和分析是至关重要的。了解当前市场趋......
  • 一个用栈实现的括号匹配
    #include<iostream>#include<cstring>#include<stack>usingnamespacestd;intmain(){stringinput;cin>>input;inta=input.length();stack<char>stk;if(a%2!=0){cout<<"False"&......
  • 智慧水务系统如何进行有效的数据架构整改?三个企业的改造实践分享
    在智慧水务系统中,往往需要对设备中产生的液位、电流、水量等实时指标数据进行存储、分析及监控操作,而这些都是典型的时序数据。面对这些数据的处理时,很多企业在前期选择的大都是传统的实时数据库甚至关系型数据库,随着设备数量的增加,数据量也达到了百万、千万量级,传统的数据库解决......
  • 专业解读财务共享实现财务数智化转型的有效路径
    近年来,随着数字经济的飞速发展,各大企业全面开启数智化转型之路,作为企业数智化转型的重要内容,财务数智化转型始于财务共享服务。然而,财务共享建设并不是一蹴而就的,如何通过财务共享实现财务数智化转型,推进业财深度融合,成为各大企业重要的研究课题。财务共享实现财务数智化转型的有效......
  • 学生成绩管理系统中[考场记录]佐证功能有效地减少学生和学校之间的矛盾。
    每学期考试结束后,大量的成绩需要人工录入到学生的成绩系统。经常会出现,考试成绩公布后,或者毕业前,部分学生对自己的成绩不满意,出现各种争议。有些错误是成绩录入人工错误,有些属于卷子丢失错误,有些是学生自己错误,或者缺考,或者未到场签字,或者是考场作弊,成绩为0,或者是否补考费未交等......
  • Problem I: STL——括号匹配
    HomeWebBoardProblemSetStandingStatusStatisticsProblemI:STL——括号匹配TimeLimit:1Sec  MemoryLimit:128MBSubmit:3032  Solved:1855[Submit][Status][WebBoard]Description给出一堆括号,看其是否匹配,例如()、()()、(())这样的......