判断两个可能包含通配符“?”和“*”的字符串是否匹配。匹配规则如下:
‘?’ 可以匹配任何单个字符。
‘*’ 可以匹配任意字符串(包括空字符串)。
两个串完全匹配才算匹配成功。
这道题比正则匹配简单一些。*自己就能匹配了不用依靠前面的字母。与正则的思想是一样的。
public class Solution {
/**
* @param s: A string
* @param p: A string includes "?" and "*"
* @return: is Match?
*/
public boolean isMatch(String s, String p) {
// write your code here
char[] s1 = s.toCharArray();
char[] s2 = p.toCharArray();
int len1 = s1.length;
int len2 = s2.length;
boolean[][] f = new boolean[len1 + 1][len2 + 1];
for(int i = 0; i <= len1; i++){
for(int j = 0; j <= len2; j++){
if(i == 0 && j == 0){
f[i][j] = true;
continue;
}
if(j == 0){
f[i][j] = false;
continue;
}
f[i][j] = false;
if(s2[j - 1] != '*'){
if(i > 0 && (s2[j - 1] == s1[i - 1] || s2[j - 1] == '?')){
f[i][j] = f[i - 1][j - 1];
}
}else{
f[i][j] = f[i][j - 1];
if(i > 0){
f[i][j] |= f[i - 1][j];
}
}
}
}
return f[len1][len2];
}
}