解题思路:
(1)以下代码不是我写的,参考的是原作者的代码
(2)使用的是有限状态机,待更新思路...
class Solution {
public:
bool match(const char* str, const char* pattern) {
if(str == nullptr || pattern == nullptr)
return false;
return matchCore(str, pattern);
}
bool matchCore(const char* str, const char* pattern) {
if(*str == '\0' && *pattern == '\0')
return true;
if(*str != '\0' && *pattern == '\0')
return false;
if(*(pattern + 1) == '*') {
if(*pattern == *str || (*pattern == '.' && *str != '\0'))
return matchCore(str + 1, pattern + 2) // 进入有限状态机的下一个状态
|| matchCore(str + 1, pattern) // 继续留在有限状态机的当前状态
|| matchCore(str, pattern + 2); // 略过一个'*'
else
return matchCore(str, pattern + 2); // 略过一个'*'
}
if(*str == *pattern || (*pattern == '.' && *str != '\0'))
return matchCore(str + 1, pattern + 1);
return false;
}
};