正则表达式匹配
来源:互联网 发布:mac os大小 编辑:程序博客网 时间:2024/06/14 00:41
【原题】
请实现一个函数用来匹配包括’.’和’*’的正则表达式。模式中的字符’.’表示任意一个字符,而’*’表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配
【思路】
这道题写的时候也是磕磕碰碰,主要是要考虑的情况比较多。
public class Solution { public boolean matchCore(char[] str,char[] pattern,int strIndex,int patternIndex){ //str和pattern都刚好完成,则说明可以成功匹配 if(strIndex==str.length&&patternIndex==pattern.length) return true;//若pattern先于str遍历完,则肯定不能够成功匹配 if(strIndex!=str.length&&patternIndex>=pattern.length) return false; //System.out.println("asd"+strIndex+" "+patternIndex); //如果str已经遍历完,而pattern还没有遍历完,有可能存在pattern存在a*a*这种情况,*每次都零次匹配 if(strIndex==str.length&&patternIndex!=pattern.length){ if(patternIndex+1<pattern.length&&pattern[patternIndex+1]=='*') return matchCore(str, pattern, strIndex, patternIndex+2); return false; } if(patternIndex<pattern.length-1&&pattern[patternIndex+1]=='*'){ //System.out.println(strIndex+" "+patternIndex); if(pattern[patternIndex]==str[strIndex]||(pattern[patternIndex]=='.'&&strIndex!=str.length)) //这一部分原理是编译原理里面的非确定性的有限状态机 return matchCore(str, pattern, strIndex+1, patternIndex+2)//移动到下一个元素,‘*’只匹配一次 ||matchCore(str, pattern, strIndex+1, patternIndex)//pattern不移动,str移动下一个,说明‘*’匹配多次 ||matchCore(str,pattern,strIndex,patternIndex+2);//这种情况了*号一次都不匹配,直接跳过‘*’号和‘*’之前的字母 else return matchCore(str, pattern, strIndex, patternIndex+2);//这里很重要,在不相等的情况下,也可以直接跳过‘*’和其之前的字母 } if(strIndex<str.length&&(pattern[patternIndex]==str[strIndex]||(strIndex!=str.length&&pattern[patternIndex]=='.'))) return matchCore(str,pattern,strIndex+1,patternIndex+1); return false; } public boolean match(char[] str, char[] pattern) { if(str.length==0&&(pattern.length==2&&pattern[1]=='*')) return true; if(str.length==0&&pattern.length==1&&pattern[0]=='.') return false; return matchCore(str,pattern,0,0); }}
参考资料:https://www.nowcoder.com/profile/320158/codeBookDetail?submissionId=1500198
阅读全文
0 0
- 正则表达式字符匹配
- 正则表达式 匹配"<"方法!
- 正则表达式匹配规则
- 正则表达式匹配规则
- 正则表达式最小匹配
- 正则表达式匹配字符串
- 正则表达式匹配
- 正则表达式匹配汉字
- 正则表达式匹配规则
- 正则表达式匹配关键字
- 正则表达式多次匹配
- 正则表达式匹配
- 正则表达式匹配汇总
- java:正则表达式匹配
- 正则表达式匹配居民身份证
- 正则表达式匹配次
- 匹配的正则表达式
- 正则表达式匹配
- android 反射使用
- 整型、实型、指针、bool与 0 的比较
- 关于Oracle数据库优化的几点总结
- Binder service入门—框架层、应用层调用native binder service
- JavaScript正则表达式
- 正则表达式匹配
- Software test & translating
- LinkedList
- react开发环境搭建
- ubuntu14.04上网问题
- Makefile
- Android 应用程序框架
- android sensor 框架分析---sensor数据流分析
- 深入理解Java类加载器(ClassLoader)