10.Regular Expression Matching
来源:互联网 发布:宁波行知实验小学校歌 编辑:程序博客网 时间:2024/04/26 06:37
Regular Expression Matching
Implement regular expression matching with support for '.'
and '*'
.
'.' Matches any single character.'*' Matches zero or more of the preceding element.The matching should cover the entire input string (not partial).The function prototype should be:bool isMatch(const char *s, const char *p)Some examples:isMatch("aa","a") → falseisMatch("aa","aa") → trueisMatch("aaa","aa") → falseisMatch("aa", "a*") → trueisMatch("aa", ".*") → trueisMatch("ab", ".*") → trueisMatch("aab", "c*a*b") → true
说明:*号之前的字符可以出现多次,比如说a*b可以和ab也可以和aab匹配,甚至也可以和b匹配,因为a可以出现0次。
public class Solution { public boolean isMatch(String s, String p) { return toMatch(s,p,0,0); } //detemine whether substring(i,s,length()) and substring(j,p.length()) are matching or not under the condition of s(0,i) and //p(0,j) are alreadly matching. public boolean toMatch(String s,String p,int i,int j){ //if j is beyond the last one, only i is beyond last one ,then return true. if(j>=p.length()){ return i>=s.length(); } //if j is the last one else if(j == p.length()-1){ //only i is the last one and {s(i)==p(j) or p(j)=='.'}, then return true; if(i==s.length()-1&&(s.charAt(i)==p.charAt(j)||p.charAt(j)=='.')){ return true; } else{ return false; } } else{ //case1:p(j+1) is not '*' if(p.charAt(j+1)!='*'){ //if no more i to match, retrun false. if(i>=s.length()){ return false; } else{ //if s(i)==p(j) or p(j) =='.', it means s(i) and p(j) are matching, to judge the rest s(i+1...) and p(j+1...). if(p.charAt(j)==s.charAt(i)||p.charAt(j)=='.'){ return toMatch(s,p,i+1,j+1); } //s(i) and p(j) are nor matching ,directly return false. else{ return false; } } } else{ //case2:specially, p(j+1) == '*'. //case2.1:if s(i...) and p(j+2...) and matching, a char & '*' can stand for 0 element if(toMatch(s,p,i,j+2)){ return true; } else{ int k = i; //case 2.2: a char & '*' can stand for 1 or more preceding element, //so try every sub string while(k<s.length()&&(k < 0 || s.charAt(k)== p.charAt(j)||p.charAt(j)=='.')){ if(toMatch(s,p,k+1,j+2)){ return true; } k++; } return false; } } } }}
0 0
- 10. Regular Expression Matching
- 10.Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 黑马程序员----集合(Collection)
- uva 1149Bin Packing
- HDU ACM 1001 Sum Problem
- HDU 1796 How many integers can you find(容斥原理)
- Steps to add Custom Tabs to the Product Admin
- 10.Regular Expression Matching
- 自守数
- Qt 5.4.0下连接MySQL数据库,QSqlDatabase: 出现QMYSQL driver not loaded 解决方案
- 常见排序算法思想以及源码实现(c++)[未完待更新]
- android /linux休眠与唤醒(三)
- 学习报告
- 去哪网实习总结:如何获取Web项目的根目录(JavaWeb)
- android-音乐播放器实现及源码下载(一)
- GYM 100285 F. Illegal spices(贪心法)