#include <iostream> #include <vector> using namespace std; int main(){ string s,t; while (cin>>s>>t){ int m = s.length(); int n = t.length(); vector<vector<bool>> dp(m+1,vector<bool>(n+1,false)); dp[0][0] = true; // 动态规划思想 // 处理模式以*开头的情况 for(int i = 1; i < m+1; ++i){ if(s[i-1] == '*'){ dp[i][0] = dp[i-1][0]; } } for(int i = 1; i < m+1; ++i){ for(int j = 1; j < n+1; ++j){ // 如果s[i-1] == t[j-1] 或s[i-1] = '?,意味着当前字符可用直接匹配 if(tolower(s[i-1]) == tolower(t[j-1]) || s[i-1] == '?' ){ // 不缺分大小写,转为小写在进行比较 // ? 与 *匹配的都是字符或者数字才行 if(isalnum(t[j-1])){ dp[i][j] = dp[i-1][j-1]; }else{ // 不是字母或数字,正常进行比较 if(s[i-1] == t[j-1]){ dp[i][j] = dp[i-1][j-1]; } } // dp[i][j] = dp[i-1][j-1]; }else if(s[i-1] == '*'){ if(isalnum(t[j-1])){ dp[i][j] = dp[i-1][j] || dp[i][j-1]; }else{ // *号可以匹配空字符串 dp[i][j] = dp[i-1][j]; } // dp[i][j] = dp[i-1][j] || dp[i][j-1]; }else{ // 添加普通字符的匹配 if(tolower(s[i-1]) == tolower(t[j-1])){ dp[i][j] = dp[i-1][j-1]; } } } } cout<<boolalpha<<dp[m][n]<<endl; } }