请实现一个函数用来匹配包括’.’和’*’的正则表达式。模式中的字符’.’表示任意一个字符,而’*’表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配
using namespace std;
class Solution {
public:
bool match(char* str, char* pattern)
{
if(str == NULL) return pattern == NULL;
if(pattern[0] == '\0') return str[0] == '\0';
if(pattern[1] != '*'){
if(str[0] != '\0' && (str[0] == pattern[0] || pattern[0] == '.'))
return match(str+1, pattern+1);
return false;
}else{
while(str[0] != '\0' && (str[0] == pattern[0] || pattern[0] == '.')){
if(match(str, pattern + 2))
return true;
str += 1;
}
return match(str, pattern + 2);
}
}
};
- in java
boolean regexMatching(String str, String pattern){
if(str == null)
return pattern == null;
return regexMatching(str, 0, str.length(), pattern, 0, pattern.length());
}
boolean regexMatching(String str, int strIndex, int totalLen, String pattern, int patternIndex, int totalPatternLen){
if(patternIndex == totalPatternLen)
return strIndex == totalLen;
if(patternIndex + 1 == totalPatternLen || ( patternIndex < totalPatternLen && pattern.charAt(patternIndex + 1) != '*')){
if(strIndex < totalLen && (str.charAt(strIndex) == pattern.charAt(patternIndex) || pattern.charAt(patternIndex) == '.'))
return regexMatching(str, strIndex + 1, totalLen, pattern, patternIndex + 1, totalPatternLen);
return false;
}else{
while(strIndex < totalLen && (str.charAt(strIndex) == pattern.charAt(patternIndex) || pattern.charAt(patternIndex) == '.')){
if(regexMatching(str, strIndex, totalLen, pattern, patternIndex + 2, totalPatternLen))
return true;
strIndex += 1;
}
return regexMatching(str, strIndex, totalLen, pattern, patternIndex + 2, totalPatternLen);
}
}