括号匹配问题

思路

  1. 遇见左括号入栈,遇见一个右括号弹出栈顶元素
  2. 右括号入栈前如果栈已经为空,则不匹配
  3. 如果不为空则读取并弹出,弹出来的元素与右括号做比较,必须匹配,不匹配返回false;
  4. 如果最后栈里还有元素,则说明不匹配

c版本实现

typedef struct Stack{int array[1000000];int top;
} Stack;//初始化
void StackInit(Stack *stack){stack->top = 0;
}
//压栈(顺序表的尾插)
void StackPush(Stack *stack, int value){stack->array[stack->top] = value;stack->top++;
}
//出栈,弹出
void StackPop(Stack *stack){stack->top--;
}
//返回栈顶元素
int StackTop(const Stack *stack){return stack->array[stack->top - 1];
}
//判断是否为空
int StackEmpty(const Stack *stack){return stack->top == 0 ? 1 : 0;
}
//获取size
int StackSize(const Stack *stack){return stack->top;
}//1. 括号匹配
bool isValid(char * s){Stack stack;StackInit(&stack);while (*s != '\0'){switch (*s){case'{':case'[':case'(':StackPush(&stack, (int)*s); break;case'}':case']':case')':if (StackEmpty(&stack)){return false;}char left = (char)StackTop(&stack);StackPop(&stack);if (!(left == '('&&*s == ')'|| left == '['&&*s == ']'|| left == '{'&&*s == '}')){return false;}break;default:break;}s++;}if (!StackEmpty(&stack)){return false;}return true;
}

c++版本实现

#include<stack>
#include<string>
class Solution {public:bool isValid(string s) {stack<char> st1;for(int i=0;i<s.size();i++){char ch =s[i];switch(ch){case'{':case'[':case'(':st1.push(ch);break;case'}':case']':case')':if(st1.empty()){return false;}char left =st1.top();st1.pop();if(!(left == '('&&ch == ')'|| left == '['&&ch == ']'|| left == '{'&&ch == '}')){return false;}break;}}      if(!st1.empty()){return false;}else{return true;}}};

括号匹配问题(c和c++版本实现)相关推荐

  1. 【区间dp】uva10003+ uva 1626 括号匹配问题 【有空自己记忆化写一下!!!】

    讲道理,其实我还不是太懂,这个题看到了两种写法 之前大概想的差不多,要这样实现呀: 常规写法,大概n--3 递归写法,稍微好理解一点 好了,接下来自从看了liuchuo的博客我要变身玛丽苏橙色了 题目 ...

  2. JAVA栈应用之括号匹配

    JAVA栈应用之括号匹配 在数据处理中,常常要判断数据中的括号,应用栈来处理及其方便. 当用户输入一个字符串时,遇到左括号时,将其入栈,如'(' '["'{,而遇到右括号时,如')" ...

  3. 【艾米莉娅】matrix:valid parentheses括号匹配代码分享(非堆栈版)

    之前大风dalao使用堆栈实现了括号匹配,但毕竟堆栈是过于超前的内容,很多小伙伴看不懂.因而分享一下自己做的非堆栈型括号匹配代码. Given a string containing just the ...

  4. [JS][编程题]括号匹配

    括号匹配 题目来源:牛客网 题目链接:括号匹配 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M 题目描述 给定一个只包含括号的字符串,判断字符串是否有效.其 ...

  5. c语言括号匹配的检验,检验括号匹配的算法

    用栈实现检验括号匹配的算法没啥具体描述,数据结构的知识,急用,有重赏 思想是 先进栈,获取第一个半边括号,标记一下,继续进栈直到获取到第二个与之匹配的另一外括号,然后出栈,取出内容.就这样.. 数据结 ...

  6. 栈 -- 顺序栈、链式栈的实现 及其应用(函数栈,表达式求值,括号匹配)

    文章目录 实现 顺序栈实现 链式栈实现 应用 函数栈 的应用 表达式求值中 的应用 括号匹配中 的应用 我们使用浏览器的时候经常会用到前进.后退功能. 依次访问完一串页面 a – b – c之后点击后 ...

  7. P1944 最长括号匹配(栈模拟/DP)

    P1944 最长括号匹配 可以直接用栈模拟,把匹配好的标记一下, 最后找到最长的匹配输出即可. 如果是要求最长的长度的题那么只需要求数就行了,没必要把原序列真的按照题意改变 如果要求序列,那么只需要按 ...

  8. 2.2栈的另一个应用:括号匹配

    2.2栈的另一个应用:括号匹配 1.LeetCode官网 美网:https://leetcode.com/ 中文网 :https://leetcode-cn.com/ 英语不咋地,所以选择此处选择中文 ...

  9. python 栈_Python数据结构与算法05:基本结构:栈的应用之括号匹配

    注:本文如涉及到代码,均经过Python 3.7实际运行检验,保证其严谨性. 本文阅读时间约为7分钟. 算法流程 括号匹配情况介绍 我们经常会遇到类似(9-1)*(8+7)/(4-2).print(& ...

最新文章

  1. VirtualBox在桥接模式下无网络处理
  2. 项目描述_单元测试技巧:创建描述性测试
  3. 利用XML实现通用WEB报表打印(转载)
  4. .net学习榜样的博客
  5. delphi word类型_现在的女生喜欢什么类型的男生?|What Kind of Boys Do Girls Like?
  6. 完整机器学习项目的流程
  7. P1110 [ZJOI2007]报表统计
  8. 分布式精华问答 | 分布式与集群的区别是什么?
  9. 10.Shell 编程从入门到精通 --- 超级工具(shell,ssh,screen,vim)
  10. pap认证失败_PPP 口令认证协议 (PAP) 的配置与故障排除
  11. CodeRush For .Net 使用-------使用标签
  12. 前端第二天 表格/表单和H5
  13. 小程序实现下拉刷新功能
  14. 代理ip按功能分哪几类?
  15. mysql查询IP地址
  16. 基于Java的实验室预约管理系统
  17. 零界之痕服务器维护,零界之痕测试服
  18. PHP GD库 生成图片水印
  19. 巴拿赫空间的基本概念
  20. 服务端开发or客户端开发的选择

热门文章

  1. 周五尾盘上涨,配合周末消息,周一套人的经典实例
  2. python web开发-flask访问请求数据request
  3. BZOJ3130: [Sdoi2013]费用流[最大流 实数二分]
  4. Common Knowledge_快速幂
  5. es安全组端口_从零开始在远程服务器(Linux)上搭建es,eshead和ik分词器
  6. 中国第一批写java的人_中国java开源界最可爱的人们
  7. mysql怎么合并行_mysql怎么合并行
  8. java jni helloword_JNI入门教程之HelloWorld篇
  9. c# 中通快递对接_快递共配是什么?行业前景怎么样?
  10. mysql恢复 报错_Mysql 数据恢复报错