题目描述
问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。
要求:
实现如下2个通配符:
*:匹配0个或以上的字符(字符由英文字母和数字0-9组成,不区分大小写。下同)
?:匹配1个字符
输入:
通配符表达式;
一组字符串。
输出:
返回匹配的结果,正确输出true,错误输出false
输入描述:
先输入一个带有通配符的字符串,再输入一个需要匹配的字符串
输出描述:
返回匹配的结果,正确输出true,错误输出false
示例1
输入
te?t*.* txt12.xls
输出
false
代码如下:
1 package com.yzh.hehe; 2 3 import java.util.Scanner; 4 5 public class StringTongPei { 6 7 public static void main(String[] args) { 8 Scanner scanner=new Scanner(System.in); 9 while (scanner.hasNext()) { 10 System.out.println(stringTongPei(scanner.nextLine(), scanner.nextLine())); 11 } 12 scanner.close(); 13 } 14 //动态规划(也可用Java自带的正则解决) 15 private static boolean stringTongPei(String tp,String string) { 16 int length1=tp.length(); 17 int length2=string.length(); 18 boolean[][] arr=new boolean[length1+1][length2+1]; 19 arr[0][0]=true; 20 for (int i = 1; i <=length1; i++) { 21 for (int j = 1; j <= length2; j++) { 22 if (tp.charAt(i-1)=='*') { 23 if (arr[i-1][j]==true||arr[i][j-1]==true) { 24 arr[i][j]=true; 25 } 26 }else if (tp.charAt(i-1)=='?') { 27 if (arr[i-1][j-1]==true) { 28 arr[i][j]=true; 29 } 30 }else { 31 if (arr[i-1][j-1]==true&&(tp.charAt(i-1)==string.charAt(j-1))) { 32 arr[i][j]=true; 33 } 34 } 35 } 36 } 37 return arr[length1][length2]; 38 39 } 40 41 }
参考:http://www.mamicode.com/info-detail-986984.html
浙公网安备 33010602011771号