正则表达式匹配
请实现一个函数用来匹配包括'.'和''的正则表达式。模式中的字符'.'表示任意一个字符,而''表示它前面的字符可以出现任意次(包含次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配。
public class Solution { /* * str:待匹配字符串 * pattern:正则表达式字符串 */ public boolean match(char[] str, char[] pattern) { int idx1=0,idx2=0; return match(str,idx1,pattern,idx2); } private boolean match(char[] str, int idx1, char[] pattern, int idx2) { //匹配字符串和正则字符串都匹配完则成功匹配 if(idx1==str.length && idx2==pattern.length) return true; //如果正则表达式完了,但匹配表达式没完说明正则表达式不能完全匹配 //可能还有一种情况就是匹配表达式完了,正则没晚,这里没有考虑是因为可能还含有.*的后缀, //如果不是可以省略的后缀则会在34行返回false if(idx1!=str.length && idx2==pattern.length) return false; if(idx2<pattern.length-1 && pattern[idx2+1]=='*'){ if((idx1<str.length )&& (pattern[idx2]=='.' || pattern[idx2]==str[idx1])) { return match(str,idx1,pattern,idx2+2) || match(str,idx1+1,pattern,idx2) || match(str,idx1+1,pattern,idx2+2); }else{ return match(str,idx1,pattern,idx2+2); } }else if((idx1<str.length) && (pattern[idx2]=='.' || pattern[idx2]==str[idx1])){ return match(str,idx1+1,pattern,idx2+1); } return false; } }