堆栈_括号匹配

class Solution {
public:
    bool isValid(string s) {
        if(s.empty())
            return false;
        stack<int> s1;
        int n=s.size();
        for(int i=0;i<n;i++)
        {
            if(s[i]==‘(‘||s[i]==‘[‘||s[i]==‘{‘)
                s1.push(s[i]);
            else if(s1.empty())
                return false;
            else if((s[i]==‘)‘&&s1.top()==‘(‘)||(s[i]==‘]‘&&s1.top()==‘[‘)||(s[i]==‘}‘&&s1.top()==‘{‘))
                s1.pop();
            else
                return false;
        }
        if(s1.empty())
            return true;
        else
            return false;
    }
};

此题的思路是:最前面的左括号要和最后面的右括号匹配,所以是一种先进后出的思想,使用堆栈最方便,且要注意括号的顺序,不能出现交叉的情况。

我在leetcode上做的时候,一开始没有注意到函数的返回值是bool,自己随便return值,所以出现了wrong answer,修改为返回false和true之后就正确了,细节要注意。

时间: 2024-10-14 01:50:20

堆栈_括号匹配的相关文章

数据结构复习_栈和队列,应用_括号匹配&amp;文件目录递归拷贝,

1.主题 2.学习视频和资料 视频    http://study.163.com/course/courseLearn.htm?courseId=555010#/learn/video?lessonId=701019&courseId=555010 http://study.163.com/course/courseLearn.htm?courseId=555010#/learn/video?lessonId=702024&courseId=555010 3.实现 数组或列表实现 4.应

括号匹配问题(C++、堆栈)

原文地址:http://www.cppblog.com/GUO/archive/2010/09/12/126483.html /* 括号匹配问题,比较经典,利用堆栈来实现(摘自internet) 1. 括号匹配的四种可能性: ①左右括号配对次序不正确 ②右括号多于左括号 ③左括号多于右括号 ④左右括号匹配正确 2. 算法思想: 顺序扫描算数表达式(表现为一个字符串),当遇到三种类型的左括号时候让该括号进栈: 当扫描到某一种类型的右括号时,比较当前栈顶元素是否与之匹配,若匹配,退栈继续判断: 若当

括号匹配_进阶篇 ( 7-2 符号配对 )

括号匹配_进阶篇(/.../) 之前有个简单的括号匹配,令这三对括号进行匹配:( ),[ ],{ } 点击跳转:简单的括号匹配问题 之所以说他们简单,是因为每个括号都只占一个字符. 而进阶篇,虽然说起来很酷,其实就是再多一个对/* */的判断 先上原题 7-2 符号配对 (20 分) 请编写程序检查C语言源程序中下列符号是否配对:/*与*/.(与).[与].{与}. 输入格式: 输入为一个C语言源程序.当读到某一行中只有一个句点.和一个回车的时候,标志着输入结束.程序中需要检查配对的符号不超过1

栈的应用-判断括号匹配

栈的一个典型应用就是可以用来协助分析表达式的括号是否匹配.括号可以延伸到任何成对出现的界定符,例如引号,书名号等. 接下来给出程序实现: 第一部分给出的是堆栈的插入,删除等操作对应的实现: 1 public class StackChar 2 { 3 private int maxSize;//堆栈数组大小 4 private char [] stackArray; 5 private int top;//堆栈顶 6 public StackChar(int maxSize) 7 { 8 thi

括号匹配为题(栈的思想)哈

数据结构实验之栈四:括号匹配 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 给你一串字符,不超过50个字符,可能包括括号.数字.字母.标点符号.空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配. 输入 输入数据有多组,处理到文件结束. 输出 如果匹配就输出“yes”,不匹配输出“no” 示例输入 sin(20+10) {[}] 示例输出 yes no 提示 我的分析:运用栈的思想,读到左边的括号,就把它推进

数据结构笔记之——括号匹配(栈的应用之一)(SDOJ 2134)

//  度过了上周的悲催状态,我决定好好学习了-- //书上括号匹配是栈的简单应用,正好在SDOJ上看到这道题,顺便做了下 题目地址:SDOJ 2134 数据结构实验之栈四:括号匹配 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 给你一串字符,不超过50个字符,可能包括括号.数字.字母.标点符号.空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配. 输入 输入数据有多组,处理到文件结束. 输出 如果匹配就输出

rwkj 1378 stack(括号匹配)

C++:泛型编程stack(括号匹配)时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte总提交:72 测试通过:39 描述 假设表达式中包含一种括号:圆括号,其嵌套顺序随意,即(()())或(())等为正确的格式,)(或((())或())均为不正确的格式.检验括号是否匹配可以用堆栈来实现当遇到 ( 时进栈,遇到 ) 时出栈进行匹配检验,如果出现不匹配的情况立即结束,否则继续取下一个字符.如果没有遇到不匹配的情况,最后判断栈是否为空,栈为空,括号匹配,否则不

一起talk C栗子吧(第二十回:C语言实例--括号匹配)

各位看官们,大家好,前几回中咱们说了堆栈的原理,并且举了实际的例子进行解说,这一回咱们说的例 子是:括号匹配.括号匹配使用了堆栈的原理,大家可以从例子看出来,所以我们把它们放在一起.闲话 休提,言归正转.让我们一起talk C栗子吧! 看官们,所谓的括号匹配,就是给了一连串括号,里面有各种类型的的括号,然后确定该串中的括号是否 是一一 匹配的.例如:({[]})这串括号中的括号就是匹配的.因为串中的括号都是成对出现.(({)这串括号就 不是匹配的,串中{没有与它配对的括号,而且与(匹配的括号数量

rwkj 1378 C++:泛型编程stack(括号匹配)

C++:泛型编程stack(括号匹配) 时间限制(普通/Java):1000MS/3000MS            运行内存限制:65536KByte 总提交:176            测试通过:88 描述 假设表达式中包含一种括号:圆括号,其嵌套顺序随意,即(()())或(())等为正确的格式,)(或((())或())均为不正确的格式.检验括号是否匹配可以用堆栈来实现当遇到 ( 时进栈,遇到 ) 时出栈进行匹配检验,如果出现不匹配的情况立即结束,否则继续取下一个字符.如果没有遇到不匹配的