对于字符串str,其中绝对不含有字符":和*”。再给定字符串exp,其中可以含有":或“*,。字符不能是exp的首字符,并且任意两个。字符不相邻。exp中的:代表任何一个字符,exp中的“表示*的前一个字符可以有0个或者多个。
请写一个函数,判断st是否能被exp匹配(注意: 输入的数据不保证合法,但只含小写字母和:和”)。
输入描述:
输入包含两行,两个字符串,分别代表str和exp(1≤lengtherp, lengthstr≤300。
输出描述:
如果str是能被exp匹配,请输出"YES",否则输出“NO”。
示例1输入1
输入
abc
abc
输出
YES
示例2输入1
输入
abcd
输出
YES
#include<bits/stdc++.h>
using namespace std;
bool isMatch(string s, string p) {
if(p.empty()) return s.empty();
if(p[1] == '*'){
return isMatch(s, p.substr(2)) || (!s.empty() && (s[0] == p[0] || p[0] == '.')) && isMatch(s.substr(1), p);
}
else{
return !s.empty() && (s[0] == p[0] || p[0] == '.') && (isMatch(s.substr(1), p.substr(1)));
}
}
int main(){
string str1, str2;
cin>> str1;
cin>> str2;
if(isMatch(str1, str2)) cout<< "YES";
else cout<< "NO";
return 0;
}