import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
String s = in.next();
String p = in.next();
s = s.toLowerCase();
p = p.toLowerCase();
StringBuffer sb = new StringBuffer();
for(int i = 0;i < s.length();i++){
if(s.charAt(i) == '*' ){
if(i == s.length() - 1)sb.append(s.charAt(i));
else if(s.charAt(i+1) == '*')continue;
else sb.append(s.charAt(i));
}
else sb.append(s.charAt(i));
}
System.out.print(match(sb.toString(),p));
}
public static boolean match(String s,String p){
//同时结束返回true,有一个先结束返回false
if(p.length() == 0){
//考虑末尾有*
if(s.length() == 0) return true;
else if(s.charAt(0) == '*') return match(s.substring(1),p);
else return false;
}
if(s.length() == 0 && p.length() != 0)return false;
char c = s.charAt(0);
switch(c){
case '?':{
return match(s.substring(1),p.substring(1));
}
case '*':{
char p0 = p.charAt(0);
if((p0 >= '0'&& p0 <= '9')||(p0 >='a' && p0 <= 'z')){
//*无法匹配特殊字符
return match(s.substring(1),p) || match(s.substring(1),p.substring(1))|| match(s,p.substring(1));
}
else return false;
}
default:{
if(c != p.charAt(0))return false;
else return match(s.substring(1),p.substring(1));
}
}
}
}
递归的JAVA实现,额外增加大小写转换,末尾存在*的case
将多个连续*合并降低时间复杂度



京公网安备 11010502036488号