题解 | #正则表达式匹配#
正则表达式匹配
http://www.nowcoder.com/practice/28970c15befb4ff3a264189087b99ad4
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @param pattern string字符串
* @return bool布尔型
*/
char s;
public boolean match(String str, String pattern) {
if(str.length()==0 && pattern.length()==0)
return false;
return f(str,pattern,0,0);
}
public boolean f (String str, String pattern,int i,int j) {
//全部匹配成功
if(i>=str.length() && j>=pattern.length())
return true;
//pattern匹配完了
if(i<str.length() && j>=pattern.length())
return false;
//下一个不是星 或者没有下一个 那么就关注当前位置能否匹配上
if(j==pattern.length()-1 ||(j<pattern.length()-1 && pattern.charAt(j+1)!='*')){
//匹配成功 或者 是.
if(i<str.length()&& (str.charAt(i)==pattern.charAt(j) || pattern.charAt(j)=='.'))
return f(str,pattern,i+1,j+1);
//匹配失败
return false;
}
// 当前位置不能成功匹配,说明pattern[j]字符不能被使用
if(i==str.length() || (i<str.length() && str.charAt(i)!=pattern.charAt(j) && pattern.charAt(j)!='.')){
return f(str,pattern,i,j+2);
}
return f(str, pattern, i, j + 2) || f(str, pattern, i + 1, j + 2) || f(str, pattern, i + 1, j); // 当前位置成功匹配,分为星号匹配0次、1次、多次三种情况
}
}
不是很会