搬运了三个题解中的别的 小记一下

import java.util.*;
import java.io.*;
public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        String in;
        while((in = br.readLine())!=null){
            String temp = br.readLine();
            //System.out.println(isMatch(temp,in));
            System.out.println(getOc(in,temp));
            //System.out.println(getOc(in,temp,0,0));
        }
    }
    public static boolean getOc(String s1,String s2,int p1,int p2){
        //递归求解
        //base case
        if (p1 == s1.length() && p2 == s2.length()){
            return true;
        }else if (p1 == s1.length() || p2 == s2.length()){
            return false;
        }
        //遇到'*'两种情况,要不就各跳过一个比较后面,要不就s2继续往后跳先不比较
        if (s1.charAt(p1) == '*'){
            return getOc(s1, s2, p1, p2+1) || getOc(s1, s2, p1+1, p2+1);
        //遇到'?'跟两个一样操作一样,直接指针都往后移一个继续比较
        }else if (s1.charAt(p1) == '?' || s1.charAt(p1) == s2.charAt(p2)){
            return getOc(s1, s2, p1+1, p2+1);
        }else {
            return false;
        }
    }//method end
    public static  boolean getOc(String in,String temp){
        //字符串通配符
            in = in.replaceAll("\\?", "[0-9A-Za-z]{1}");
            in = in.replaceAll("\\*", "[0-9A-Za-z]{0,}");
            //in = in.replaceAll("\\.", "\\\\.");
            return temp.matches(in);
    }
    public static  boolean isMatch(String s, String p) {
         //动态规划
        if(s.length() == 0 && p.length() == 0)return true;
        if(s.length()!= 0 && p.length() == 0) return false;
        boolean [][] dp = new boolean [s.length()+1][p.length()+1];
        dp[0][0] = true;
        for(int j = 2; j <= p.length(); j++){
            if(p.charAt(j-1) == '*' && dp[0][j-2]){
                dp[0][j] = true;
            }
        }
        for(int i = 1; i <= s.length(); i++){
            for(int j = 1; j <= p.length(); j++){
                char a = s.charAt(i-1), b = p.charAt(j-1);
                if(a == b || b == '?'){
                    dp[i][j] = dp[i-1][j-1];
                }
                else if(b == '*'){
                    if(j>=2){
                         dp[i][j] = dp[i-1][j] || dp[i][j-2];
                    }

                       }

                else dp[i][j] = false;
            }
        }
        return dp[s.length()][p.length()];
    }

}