个人博客:小景哥哥
52.正则表达式匹配
题目描述
请实现一个函数用来匹配包括’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配
public class Solution {
//剑指offer书上算法思想
public boolean match(char[] str, char[] pattern)
{
if(str.length <= 0 && pattern.length <= 0)
return true;
return matchCore(str,pattern,0, 0);
}
public static boolean matchCore(char[] str, char[] pattern, int s, int p){
if(s == str.length && p == pattern.length)
return true;
if(s != str.length && p == pattern.length)
return false;
//处理遇到*的情况
if(p + 1 < pattern.length && pattern[p + 1] == '*'){
if((s != str.length && pattern[p] == str[s]) || (pattern[p] == '.' && s != str.length)){
return matchCore(str, pattern, s, p + 2)//相当于*匹配零个,模式串上移动两个
|| matchCore(str, pattern, s + 1, p);//字符串上移动一个,模式上保持不变
}else{
return matchCore(str, pattern, s, p + 2);
}
}
//两个字符相等,或者匹配.
if((s != str.length && pattern[p] == str[s]) || (pattern[p] == '.' && s != str.length))
return matchCore(str, pattern, s + 1, p + 1);
return false;
}
//投机取巧法
public boolean match2(char[] str, char[] pattern){
String regex = String.valueOf(pattern);
String s = String.valueOf(str);
return s.matches(regex);
}
}