题解 | #正则表达式匹配#
正则表达式匹配
http://www.nowcoder.com/practice/28970c15befb4ff3a264189087b99ad4
using namespace std;
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* @param str string字符串
* @param pattern string字符串
* @return bool布尔型
*/
bool match(string str, string pattern) {
// write code here
int i = str.size()-1;
int j = pattern.size() - 1;
cout<<i<<endl;
cout<<j<<endl;
while(i >= 0 && j >= 0){
if(str[i] == pattern[j]){
i--;
j--;
}else if(pattern[j] == '.'){
i--;
j--;
}else if(pattern[j] == '*' && pattern[j-1] == str[i]){
i -= 1;
j -= 2;
while(pattern[j] == '*' && pattern[j-1] != str[i] && str[i] == str[i+1]){
j = j - 2;
while(pattern[j] == str[i+1]){
j -= 1;
}
while(str[i] == str[i+1]){
i -= 1;
}
}
while(str[i] == pattern[j] && str[i] == pattern[j+1]){
i -= 1;
j-= 1;
}
while(str[i] != pattern[j] && str[i] == pattern[j+1]){
i--;
}
}else if(pattern[j] == '*' && pattern[j-1] == '.'){
j -= 2;
if(str[i] != pattern[j]){
i--;
}
while(str[i] != pattern[j] && str[i+1] == str[i]){
i--;
}
if(str[i] != pattern[j]){
i--;
}
}else if(pattern[j] == '*' && pattern[j-1] != str[i] && pattern[j-1] != '.'){
j -= 2;
}
else{
return false;
}
}
while(j >= 0){
if(pattern[j] == '*'){
j -= 2;
}
else{
return false;
}
}
if(i >= 0 ){
return false;
}
return true;
}
};