【牛客题解】 ——正则表达式的匹配

正则表达式的匹配

在这里插入图片描述
(我说大晚上看这个,锻炼人的思维…你信吗?)
思路:
1、两个都为空,返回真
2、第一个为空,但是第二个不为空,返回假(如果第一个为空,但是第二个不空,是有可能返回真的,比如 “” 和 “.")
3、pattern中当前位置的下一个不是“ * ”,如 bc 和 cd ,直接比较当前位置,能够匹配就继续配下一个,不匹配,直接返回false; 如果pattern的下一个是“ * ”,那这里就要分为匹配一个或者多个,如 bbbbc 和 b
c,那str就要++,pattern不变,匹配了0个,如 cd 和 a*c,这时候就把pttern向后移动两位,跳过” * ".

class Solution {
public:
    bool match(char* str, char* pattern)
    {
      if(*str=='\0'&&*pattern=='\0')  //两个都为空返回真
          return true;
      if(str!=NULL&&*pattern==NULL)  //第一个不为空,第二个为空
          return false;
      if(*(pattern+1)!='*')
      {
          if((*str==*pattern)||(*str!='\0'&&*pattern=='.'))
              return match(str+1, pattern+1);
          else
              return false;
      }
      else
      {
          if((*str==*pattern)||(*str!='\0'&&*pattern=='.'))
              return match(str+1, pattern)||match(str, pattern+2);
          else
              return match(str,pattern+2);
      }
        
    }
};
原创文章 78 获赞 21 访问量 3529

猜你喜欢

转载自blog.csdn.net/Vicky_Cr/article/details/105670801