题解 | #字符串通配符#
字符串通配符
https://www.nowcoder.com/practice/43072d50a6eb44d2a6c816a283b02036
import java.util.*;
public class Main{
public static void main(String []args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
String key = in.nextLine().toLowerCase(Locale.ROOT);
String line = in.nextLine().toLowerCase(Locale.ROOT);
boolean[] dp = new boolean[line.length() + 1];
dp[0] = true;
for (char k : key.toCharArray()) {
boolean pre = dp[0];
dp[0] = dp[0] && '*' == k;
for (int i = 1; i < dp.length; i++) {
char c = line.charAt(i - 1);
boolean temp = dp[i];
if (!Character.isLetter(c) && !Character.isDigit(c)) {
if (k != '*') {
dp[i] = c == k && pre;
}
}else if (k == '?') {
dp[i] = pre;
}else if (k == '*') {
dp[i] |= dp[i - 1];
}else {
dp[i] = c == k && pre;
}
pre = temp;
}
}
System.out.println(dp[dp.length - 1]);
}
in.close();
}
}
动态规划,需要注意的细节有点多
查看19道真题和解析