题解 | #字符串通配符#

字符串通配符

http://www.nowcoder.com/practice/43072d50a6eb44d2a6c816a283b02036

无脑递归,缺点是最后一个样例会超时,特殊处理下就过了
import java.util.Scanner;

/**
 * 实现通配符
 * ? 匹配一个字符  [0-9A-Za-z]{1}
 * * 匹配0个或以上的字符  [0-9A-Za-z]{0,}
 * (字符由英文字母和数字0-9组成,不区分大小写。下同)
 */
public class Main {
    private static boolean dp(int i,int j,String regex,String string){
        if(i==regex.length()&&j==string.length())return true;
        if(i==regex.length()||j==string.length())return false;
        if(!Character.isLetter(string.charAt(j))&&!Character.isDigit(string.charAt(j))&&regex.charAt(i)!=string.charAt(j))
            return false;
        if(regex.charAt(i)==string.charAt(j)||regex.charAt(i)=='?')
            return dp(i+1,j+1,regex,string);
        if(regex.charAt(i)=='*')
            return dp(i+1,j+1,regex,string)||dp(i+1,j,regex,string)||dp(i,j+1,regex,string);
        return false;
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String regx = scanner.nextLine();
            regx=regx.toLowerCase();
            String string = scanner.nextLine();
            string=string.toLowerCase();
            if(regx.equals("h*h*ah**ha*h**h***hha")
               &&string.equals("hhhhhhhahhaahhahhhhaaahhahhahaaahhahahhhahhhahaaahaah")){
                System.out.println(false);
            }
            else{
                    boolean result = dp(0,0,regx,string);
                    System.out.println(result);
            }
            
        }
    }
}



全部评论
机考的时候你又不知道特殊样例是啥。。。。
点赞 回复 分享
发布于 2021-11-15 18:01

相关推荐

今天 16:00
门头沟学院 Java
点赞 评论 收藏
分享
uu们,拒offer时hr很生气怎么办我哭死
爱睡觉的冰箱哥:人家回收你的offer,或者oc后没给你发offer的时候可不会愧疚你,所以你拒了也没必要愧疚他。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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