剣指offer(C++)--正規表現マッチング
1815 ワード
タイトル
'.' '*' 。 '.' ,
'*' ( 0 )。 ,
。 , "aaa" "a.a" "ab*ac*a" , "aa.a"
"ab*a"
, :
1> , true
2> , , false( ,
, , ,
, “a*a*a*a*”, ‘*’ 0 ,
)
, : 。 pattern
‘*’, :pattern ‘*’
‘*’:
1>pattern ‘*’: , 。
, ; , false。
“ ”, , , pattern
‘.’, str ‘\0’。
2>pattern ‘*’ , , ‘*’ 0 。
:
a> ‘*’ 0 ,str ,pattern ,
‘*’ ;
b> ‘*’ 1 ,str ,pattern
。( 1 , : ,
str , pattern , a;
, str )
。
class Solution {
public:
bool match(char* str, char* pattern)
{
if(str[0]=='\0' && pattern[0]=='\0')
return true;
if(str[0]!='\0' && pattern[0]=='\0')
return false;
if(pattern[1]=='*'){
if(pattern[0]==str[0]||(pattern[0]=='.'&&str[0]!='\0'))
return match(str+1,pattern) || match(str,pattern+2);
else
return match(str,pattern+2);
}
if(str[0]==pattern[0]||(pattern[0]=='.'&& str[0]!='\0'))
return match(str+1,pattern+1);
return false;
}
};