题意:
给你一个字符串s,s串只含字母。给你一个字符串p,不仅含有字母,还含有'.'和'*’;
'*'的作用是可以使其前一个字符的数量任意变化(可以为0);
'.'的作用是可以替换为任一字母;
问你这两个字符串能不能完全相同
思路:
因为s串是固定,所以只需要讨论p串可能的变形,
如果p串长度大于1,则考虑要匹配的字符的下一个字符是不是'*',不是'*'则直接匹配当前字符;否则直接跳过p的当前字符,或者p的当当前字符可以出现1~s串的上限次(这里可以用回溯法,如果出现一次不能完全匹配,则回溯到当前,考虑出现两次的情况,...)
java代码:
class Solution {
public boolean isMatch(String s, String p) {
if(p.length()==0){
return s.length()==0;
}
if(p.length()==1){
if(s.length()==0){
return false;
}
if(p.charAt(0)!=s.charAt(0)&&p.charAt(0)!='.'){
return false;
}
else{
return isMatch(s.substring(1),p.substring(1));
}
}
else{
if(p.charAt(1)!='*'){
if(s.length()==0){
return false;
}
if(p.charAt(0)!=s.charAt(0)&&p.charAt(0)!='.'){
return false;
}
else{
return isMatch(s.substring(1),p.substring(1));
}
}
else{
if(isMatch(s,p.substring(2))){
return true;
}
int i = 0;
while(i<s.length()&&(p.charAt(0)=='.'||s.charAt(i)==p.charAt(0))){
if(isMatch(s.substring(i+1),p.substring(2))){
return true;
}
i++;
}
return false;
}
}
}
}