题解 | #字符串通配符#
字符串通配符
https://www.nowcoder.com/practice/43072d50a6eb44d2a6c816a283b02036
import java.util.Scanner; import java.util.regex.Pattern; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String p = in.nextLine(); String s = in.nextLine(); p = p.replaceAll("\\*{2,}", "*"); System.out.println(match(p, s, 0, 0)); } private static boolean match(String p, String s, int pi, int si) { if(pi == p.length() && si == s.length()) return true; if(pi == p.length() || si == s.length()) return false; char pc = p.charAt(pi); char sc = s.charAt(si); if(pc == '?') { return (Character.isAlphabetic(sc) || Character.isDigit(sc)) && match(p, s, pi+1, si+1); } if(pc == '*') { // 目标串索引移动时表示要匹配, 需要验证匹配的字符类型 return match(p, s, pi+1, si) || ((match(p, s, pi+1, si+1) || match(p, s, pi, si+1)) && (Character.isAlphabetic(sc) || Character.isDigit(sc))); } // 懒得判断字母了, 反正能过 if((pc | 0x20) == (sc | 0x20)) { return match(p, s , pi+1, si+1); } return false; } }