题解 | #字符串通配符#

字符串通配符

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;
    }

}

全部评论

相关推荐

昨天 13:49
南京大学 财务
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务