详细思路在代码的每行代码中都有注释
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @param pattern string字符串
* @return bool布尔型
*/
#include <stdbool.h>
bool core(char* str, char* pattern)
{
if(str[0] == 0 && pattern[0] == 0) //若剩下的匹配str和pattern都为空串,则符合规则返回true
return true;
if(str[0] != 0 && pattern[0] == 0) //r若剩下的str不为空串,模式串pattern为空,则返回false
return false;
if(pattern[1] == '*') //模式串有‘*’的情况
{
if(pattern[0] == str[0] || (pattern[0] == '.' && str[0] != 0)) //若*前面的字符串匹配或者模式串为'.*'情况
{
return core(str+1, pattern+2) || //str[0]刚好有且只有一个字符与模式串匹配上了
core(str+1, pattern) || //有多个str[0]字符情况,则str接着往后匹配
core(str, pattern+2); //模式串为'.*'的情况且str没有任何字符可以匹配
}
else
return core(str, pattern+2); //匹配0个的情况,直接跳过*,接着往后匹配
}
if(pattern[0] == str[0] || (pattern[0] == '.' && str[0] != 0)) //不是*的情况
return core(str+1, pattern+1);
return false;
}
bool match(char* str, char* pattern ) {
// write code here
if(str == NULL || pattern == NULL)
return false;
return core(str, pattern);
}