博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode Valid Parentheses 有效括号
阅读量:4334 次
发布时间:2019-06-07

本文共 1400 字,大约阅读时间需要 4 分钟。

1 class Solution { 2 public: 3 void push(char c){        //插入结点 4     struct node *n=new struct node; 5     n->nex=0; 6     n->ch=c; 7     n->pre=last; 8     last->nex=n; 9     last=last->nex;10 }11 bool jud(char c){        //判断12     struct node *m;13     if(c==']')14         c='[';15     else if(c=='}')16         c='{
';17 else if(c==')')18 c='(';19 if(last->ch==c&&first.nex!=0){20 m=last;21 last=last->pre;22 delete m;23 last->nex=0;24 return 1;25 }26 else27 return 0;28 }29 bool isValid(string s) { //主判断函数30 char *p=&s[0];31 while(*p!='\0'){32 if(*p=='[' || *p=='{
' || *p=='(')33 push(*p);34 else if(*p==']' || *p=='}' || *p==')'){35 if(jud(*p)==false) //判断错误36 return 0;37 }38 p++;39 }40 if(last==&first)41 return 1;42 else43 return 0; 44 }45 private: 46 struct node{ //结构体47 struct node *pre;48 struct node *nex;49 char ch;50 }first={
0,0,0};51 struct node *last=&first; 52 53 };

题意:判断括号是否成对的出现,并且是合法的,类似判断一个算术式子中的括号有没有错一样。过滤掉非3种括号的其他字符。

思路:因为不知道这个string到底多大,可能很大,可能很小,所以我选择用盏(链表)来解决。一旦有不成对出现的,立刻就可以返回了。我这里用多两个函数将功能模块化,一个用于进盏,一个用于转化括号为另一半并判断。正常情况下结束时盏中应该空(我用last是否为链表头first来判断)。

注意:此题用STL和string类来解决应该更简单。代码量也会减少很多。

 

转载于:https://www.cnblogs.com/xcw0754/p/4106953.html

你可能感兴趣的文章
java-集合框架
查看>>
RTMP
查看>>
求一个数的整数次方
查看>>
点云PCL中小细节
查看>>
铁路信号基础
查看>>
RobotFramework自动化2-自定义关键字
查看>>
[置顶] 【cocos2d-x入门实战】微信飞机大战之三:飞机要起飞了
查看>>
BABOK - 需求分析(Requirements Analysis)概述
查看>>
第43条:掌握GCD及操作队列的使用时机
查看>>
Windows autoKeras的下载与安装连接
查看>>
CMU Bomblab 答案
查看>>
微信支付之异步通知签名错误
查看>>
2016 - 1 -17 GCD学习总结
查看>>
linux安装php-redis扩展(转)
查看>>
Vue集成微信开发趟坑:公众号以及JSSDK相关
查看>>
技术分析淘宝的超卖宝贝
查看>>
i++和++1
查看>>
react.js
查看>>
P1313 计算系数
查看>>
NSString的长度比较方法(一)
查看>>