正则表达式(栈的应用)
2017-07-07 16:56
218 查看
题目:
给定一个字符串S,判断其是否为合法的正则表达式一个正则表达式定义:(此正则表达式非正规)
0是正则表达式,1是正则表达式
P和Q是正则表达式,则PQ是正则表达式
P是正则表达式,则(P)是正则表达式
P是正则表达式,则P*是正则表达式
P和Q是正则表达式,则P|Q是正则表达式
输入样例:
010101101*(11|0*)*
)*111
#
输出样例:
YESYES
NO
题解:
用一个栈来存储出现的(和|,遇到)判断此时是否合法,检查栈的)符号。遇到|或(,将当前字符串的起始位置设置为这个位置,用一个bool标记当前串是否为合法。(解释不清楚,看代码,,,)代码:
#include<cstdio> #include<cstring> const int MAXN=10000010; char str[MAXN]; int top; char op[MAXN]; int main() { int n; bool success; while(~scanf("%s",str)) { if(str[0]=='#') break; top=0; success=0; n=strlen(str); for(int i=0;i<n;i++) { if(str[i]=='0'||str[i]=='1') success=1; else if(str[i]=='(') { op[top]='('; success=0; } else if(str[i]==')') { while(success&&op[top]!='('&&top>0) top--; if(!success) break; if(top!=0&&op[top]=='(') top--; else { success=0; break; } } else if(str[i]=='*') { if(!success) break; } else if(str[i]=='|') { if(!success) break; op[top]='|'; success=0; } else { success=0; break; } } while(top) { if(op[top]=='|'&&success) top--; else { success=0; break; } } if(success) printf("YES\n"); else printf("NO\n"); } return 0; }
另一做法:Na2O博客
相关文章推荐
- 正则表达式在网页处理中的应用四则
- 正则表达式在网页处理中的应用
- 正则表达式在EditPlus中的常见应用
- 正则表达式的应用
- 正则表达式概述与JAVA中正则表达式的应用
- 正则表达式的应用案例
- 正则表达式(判断应用)
- 正则表达式应用笔记----解析网页,获取并显示“未来三天全国天气预报”(java)
- 正则表达式各种常规应用
- 正则表达式的应用
- 正则表达式应用(二)
- C#应用正则表达式将相当路径转化为绝对路径
- 正则表达式应用之提炼百度歌词的实现代码
- 正则表达式之电话号码正则表达式—数字限制应用
- 正则表达式在UBB论坛中的应用(http://www.blueidea.com/bbs/newsdetail.asp?id=303249)
- 正则表达式在VB.NET中的应用
- 正则表达式在VBScript中的应用
- 正则表达式的应用
- 正则表达式在Java中的应用
- 正则表达式及其应用 - 2