【剑指offer】正则表达式匹配
来源:互联网 发布:结婚录像制作软件 编辑:程序博客网 时间:2024/05/01 05:46
题目:请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配。
分析:想到的方法就是递归了。首先模式的第二个字符是’*’时,若str字符和模式字符相等或str字符不为’\0’且模式字符为’.’,递归返回三种情况的或值。情况1,模式*之前的字符出现0次,则str,pattern+2;情况2. 模式*之前的字符出现1次,则str+1,pattern+2;情况3 模式*之前的字符出现2次以上,则str+1,pattern;否则str既不和模式字符相等也不满足tr字符不为’\0’且模式字符为’.’的情况,只能按*之前的字符出现0次算了,即str,pattern+2。
模式的第二个字符不为’*’时,若str字符和模式字符相等或str字符不为’\0’且模式字符为’.’,则str+1,pattern+1;否则返回false;
递归出口:当str字符和模式字符都为’\0’,返回true;当str字符不为’\0’且模式字符为’\0’时返回false;
程序:
bool match(char* str, char* pattern) { if(*str=='\0'&&*pattern=='\0') return true;if(*str!='\0'&&*pattern=='\0') return false; if(*(pattern+1)=='*'){ if(*str==*pattern||*str!='\0'&&*pattern=='.') return match(str,pattern+2)||match(str+1,pattern+2)||match(str+1,pattern); else return match(str,pattern+2); } if(*str==*pattern||*str!='\0'&&*pattern=='.') return match(str+1,pattern+1); return false; }
阅读全文
0 0
- 《剑指offer》正则表达式匹配
- 剑指offer--正则表达式匹配
- 剑指offer:正则表达式匹配
- [剑指offer]正则表达式匹配
- 剑指offer-正则表达式匹配
- 剑指offer|正则表达式匹配
- 《剑指offer》-正则表达式匹配
- 剑指offer-正则表达式匹配
- 【剑指offer】正则表达式匹配
- 【剑指offer】正则表达式匹配
- 剑指offer-正则表达式匹配
- 剑指offer:正则表达式匹配
- 剑指Offer---正则表达式匹配
- 剑指offer 53-正则表达式匹配
- 剑指offer—正则表达式匹配
- 正则表达式匹配(递归+剑指offer)
- 《剑指offer》——正则表达式匹配
- 正则表达式匹配-剑指offer(JAVA版)
- WebGL之旅(五)复合变换
- 2.1 linux存储管理-内存管理基本框架
- 每日一题——二进制数1的个数
- 十六进制颜色值与rgba格式的互相转换
- 58同城架构师带你实战高可用架构设计
- 【剑指offer】正则表达式匹配
- 多线程面试题
- js !important
- The bss section
- 【bzoj1355】 [Baltic2009]Radio Transmission
- 【备战秋招Day 8】经典面试题29-32及在线编程题22-24答案
- Kotlin-46.JavaScript动态类型(Dynamic Type)
- HDU 1166 敌兵布阵 (线段树 插点问线)
- JS全屏