Wildcard-Matching & Regular Expression Matching
Wildcard-Matching中?匹配任意一个字符,*匹配任意长度字符串包括空字符串
方法一:记录*的位置,分别考虑*匹配空,匹配一个,匹配两个,三个...
1 bool isMatch(const char *s, const char *p) { 2 int sStar=-1,pStar=-1; 3 int i=0,j=0; 4 for(i=0;i<strlen(s);)//不考虑p字符串长 s=‘‘aa‘‘, p=‘‘a‘‘ 5 { 6 if(p[j]==‘*‘) 7 { 8 sStar=i; 9 pStar=j; 10 j++; 11 } 12 else if(p[j]==s[i]||p[j]==‘?‘) 13 { 14 i++; 15 j++; 16 } 17 else if(sStar>=0)//没有匹配但之前记录sStar了 18 { 19 i = ++sStar; 20 j = pStar+1; 21 } 22 else return false; 23 } 24 while(p[j]==‘*‘)j++; 25 return j==strlen(p); 26 }
方法二:DP dp[i][j]=1表示s[0:i]与p[0:j]匹配
原文地址:https://www.cnblogs.com/demian/p/10498659.html
时间: 2024-10-09 07:22:43