括号匹配算法
来源:互联网 发布:程序员 白发老头图片 编辑:程序博客网 时间:2024/06/06 18:51
题目:有一段字符串,包含"("和")"、"["和"]"、"{"和"}"中的一种或者多种,这三种括号出现次序不定,可随意嵌套。编写代码判断三种括号是否正确匹配。
思路一(栈的思想):括号匹配是运用栈的经典思想。在算法中设置一个空栈,每次读入一个括号,若是左括号,则压入栈中,等到对应的右括号压栈,若是右括号,能使置于栈顶的最急迫的期待得以消解,此时将栈顶的左括号弹出,或者是不匹配的情况,判断为不匹配。待算法结束时,栈中应该为空,判断为匹配。
前提说明:
顺序表类型定义如下:
typedef struct
{
ElemType *elem;
int length;
int listsize;
} SqList; // 顺序表
Stack是一个已实现的栈。
可使用的相关类型和函数:
typedef char SElemType; // 栈Stack的元素类型
Status InitStack(Stack &s);
Status Push(Stack &s, SElemType e);
Status Pop(Stack &s, SElemType &e);
Status StackEmpty(Stack s);
Status GetTop(Stack s, SElemType &e);
主要函数代码:
1 Status MatchCheck(SqList exp) 2 /* 顺序表exp表示表达式; */ 3 /* 若exp中的括号配对,则返回TRUE,否则返回FALSE */ 4 { 5 Stack s; 6 char e; 7 8 //逐个读入括号 9 for(int i=0;i<exp.length;i++)10 {11 if(exp.elem[i]=='('||exp.elem[i]=='{'||exp.elem[i]=='[')//若遇左括号,则直接入栈12 { 13 Push(s,exp.elem[i]);14 }15 else if(exp.elem[i]==')')//若遇右圆括号,则尝试匹配栈顶括号16 { 17 if(GetTop(s,e))18 {19 if(e=='(')//匹配成功,左圆括号出栈20 {21 Pop(s,e);22 } 23 else//匹配不成功24 {25 return FALSE;26 } 27 } 28 else//栈为空,匹配不成功29 {30 return FALSE; 31 } 32 }33 else if(exp.elem[i]=='}')//若遇右花括号,则尝试匹配栈顶括号34 {35 if(GetTop(s,e))36 {37 if(e=='{')//匹配成功,左花括号出栈38 {39 Pop(s,e);40 } 41 else//匹配不成功42 {43 return FALSE;44 } 45 }46 else47 {48 return FALSE;49 } 50 }51 else if(exp.elem[i]==']')//若遇右方括号,则尝试匹配栈顶括号52 {53 if(GetTop(s,e))54 {55 if(e=='[')//匹配成功,左方括号出栈56 {57 Pop(s,e);58 } 59 else//匹配不成功60 {61 return FALSE;62 } 63 }64 else65 {66 return FALSE;67 } 68 }69 } 70 if(StackEmpty(s))//当所有括号匹配成功时,栈应为空71 {72 return TRUE;73 }74 else75 {76 return FALSE;77 }78 }
以上本人参考他人代码,深刻学习理解栈的思想与运用,如有错误请指出。
思路二(逻辑思想):从整体字符串来看,符合括号匹配只要满足两个条件:(1)相同符号的左括号数与右括号的个数必须相同;(2)在字符串的任意位置,相同符号的右括号个数必须小于等于左括号个数。两个条件同时满足时,必定匹配。
代码:
输出结果:
本人能力有限,该方法为本人编写,若有不足的地方,请指出。
- java括号匹配算法
- 括号匹配算法思想
- 验证括号匹配-算法
- 趣味算法-括号匹配
- 括号匹配算法
- java括号匹配算法
- 括号匹配算法
- 括号匹配算法
- 匹配括号的算法
- 括号匹配算法
- java 括号匹配算法
- 括号匹配算法
- 括号匹配算法
- 括号匹配算法
- 括号匹配 算法
- 括号匹配算法
- 括号匹配算法
- 括号匹配算法
- RadioGroup修改默认小圆点
- 说说MQ集群这件小事
- 思维 hdu 1847 (Good Luck in CET-4 Everybody!)
- 算法总结——大整数加法
- Git查看某一个文件的修改记录(提交记录)
- 括号匹配算法
- java设计模式,享元模式
- Android Studio 使用小技巧和快捷键
- 实用文章收集
- 去除字符串中的空格、回车、换行符、制表符
- 图片旋转 Mat 版本
- Ubuntu系统下Android开发环境搭建相关问题
- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- socket编程发送GET请求