动态规划

package com.patience.interview.huawei;import java.util.Scanner;/*** 通配符匹配算法* @author Green.Gee* @date 2022/11/23 10:55* @email green.gee.lu@gmail.com*/
public class UniversalFit {public static void main(String[] args) {Scanner in = new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseString line1 = in.nextLine().toLowerCase();// * 匹配 0 - 多个字符,? 匹配一个字符 匹配是不区分大小写String line2 = in.nextLine().toLowerCase();// 匹配字符 0-9 英文字符char [] s1 = line1.toCharArray();char [] s2 = line2.toCharArray();boolean[][] dp = new boolean[s1.length + 1][s2.length + 1];dp[0][0] = true;for(int i = 1;i<= s1.length;i++) {if(s1[i - 1] == '*'){dp[i][0] = true;}elsebreak;}for(int i = 1; i <= s1.length; i++){for(int j = 1; j <= s2.length; j++) {char a = s1[i - 1];char b = s2[j - 1];if(a == b){dp[i][j] = dp[i - 1][j - 1];}boolean condition = (b>='a'&&b<='z')||(b>='0'&&b<='9');if(a == '*' && condition){dp[i][j] = dp[i - 1][j] ||dp[i][j - 1]||dp[i - 1][j - 1];}else if(a == '?' && condition){dp[i][j] = dp[i - 1][j - 1];}}}System.out.println(dp[s1.length][s2.length]);}}
}

递归方法(未试验通过)

private static boolean helper(String s1, String s2, int p1, int p2){//base caseif (p1 == s1.length() && p2 == s2.length()){return true;}else if (p1 == s1.length()){return false;}else if(p2 == s2.length()){return false;}//遇到'?'跟两个一样操作一样,直接指针都往后移一个继续比较if(s1.charAt(p1) == s2.charAt(p2)){return helper(s1, s2, p1+1, p2+1);}if (s1.charAt(p1) == '?'){boolean flag = ((s2.charAt(p2)>='a'&&s2.charAt(p2)<='z')||(s2.charAt(p2)>='0'&&s2.charAt(p2)<='9'));if(flag){return helper(s1, s2, p1+1, p2+1);}return false;//遇到'*'两种情况,要不就各跳过一个比较后面,要不就s2继续往后跳先不比较}else if (s1.charAt(p1) == '*'){if(p1 == s1.length() - 1){p1 = s1.length();p2 = s2.length();return helper(s1,s2,p1,p2);}boolean flag = ((s2.charAt(p2)>='a'&&s2.charAt(p2)<='z')||(s2.charAt(p2)>='0'&&s2.charAt(p2)<='9'));if(flag){return helper(s1, s2, p1, p2 +1) ||helper(s1, s2, p1+1, p2+1) ||helper(s1, s2, p1 +1, p2) ||helper(s1, s2, p1 - 1, p2);}return false;}else {return true;}}

通配符(?,*)匹配算法Java相关推荐

  1. 动态规划——通配符匹配算法

    -----Edit by ZhuSenlin HDU 设计通配符匹配算法,其中*号可以匹配任意多个字符,?号可以匹配任意一个字符.例如12345和12*.12*?以及12*4?等都匹配. 函数原型为: ...

  2. java main是标识符吗_main方法的认识 、通配符、java的注释、java的符(标识符)【Java基础】...

    main方法的认识 print()和println()的区别 print()打印不换行 println()打印并换行 通配符 \n换行符\t制表符都应用于控制台 \n换行 \t以表格的形式显示 Sys ...

  3. java配u型你,泛型方法上的多个通配符使Java编译器(还有我!)很迷茫

    如附录B所示,这与多个通配符无关,而是误解了什么List>真的意味着. 让我们首先提醒自己,Java泛型是不变的,这意味着什么:阿 Integer是 Number A List是 不 a Lis ...

  4. 括号匹配算法 java_使用栈实现括号匹配算法-java

    题目:检验符号是否匹配. '['和']', '('和')'成对出现时字符串合法. 例如"[][]()", "[[([]([])()[])]]"是合法的; &qu ...

  5. Java泛型解析(02):通配符限定

    Java泛型解析(02):通配符限定      考虑一个这种场景.计算数组中的最大元素. [code01] public class ArrayUtil {public static <T> ...

  6. java泛型(三)、通配符的使用

    通配符有三种: 1.无限定通配符   形式<?> 2.上边界限定通配符 形式< ? extends Number>    //用Number举例 3.下边界限定通配符    形 ...

  7. [实用][更新中]Java Apache POI 打印Word文档工具(含文本替换,动态表格功能)

    [实用][更新中]Java Apache POI 打印Word文档工具(含文本替换,动态表格功能) 基于Apache POI对Word进行操作 一.基于Apache POI封装的word文档工具V1. ...

  8. java基础知识点_「Java面试题/知识点精华集」20000+字的Java基础知识篇(2020最新版) !

    " 本文已经收录进我的 79K Star 的 Java 开源项目 JavaGuide:https://github.com/Snailclimb/JavaGuide (「Java学习+面试指 ...

  9. Lucene 的四大索引查询 ——bool 域搜索 通配符 范围搜索

    Lucene 的四大索引查询   清单1:使用布尔操作符 Java代码      //Test boolean operator blic void testOperator(String index ...

最新文章

  1. 关于VS2017中fopen、fscanf等函数无法使用的问题
  2. 用同一uuid作为两个字段的值_这两个小技巧,让SQL语句不仅躲了坑,还提升了 1000 倍...
  3. phpMyAdmin导入大的sql文件
  4. 【POJ - 3352】Road Construction(Tarjan,边双连通分量)
  5. mysql 窗口函数_MySQL数分:窗口函数
  6. 设置mysql允许外网访问
  7. 华为机试题输入输出总结
  8. 号称是世界最大的电子书图书馆ZLibrary
  9. 使用Photoshop制作圣诞海报
  10. chromium git下载
  11. Windows10 最新版官方iso镜像(截至2021/02)win10 2009(20h2)
  12. 北京大学C语言学习第三天
  13. 在《王者荣耀》来聊聊游戏的帧同步
  14. 游戏本地化不止是翻译,还有……
  15. Quantopian自学笔记04
  16. 图/树——宽度优先搜索(BFS)
  17. 产品经理也要懂ASO
  18. 小屁孩的伤感空间日志_多谢伱的不珍惜让我学会死訫
  19. 堡垒主机在信息安全等级保护制度中的探究与应用
  20. 《量化炼金术-中低频量化交易策略研发》读书笔记-序言,引言

热门文章

  1. 服务器配置对shtml支持(nginx 或 tomcat)
  2. 水星迷你无线路由器ap模式 下要不要启用 dhcp服务器,水星(Mercury)Mini无线路由器AP模式设置...
  3. Matlab实现幅度调制详解
  4. 基于matlab的正交振幅调制与解调,正交幅度调制(QAM)及解调Matlab仿真
  5. [laravel]laravel用户认证及api认证,session,cookie,api_token
  6. python嵌入式脚本_基于Python的嵌入式脚本研究
  7. Openjudge1.4答案
  8. 为什么年薪 50W 是程序员的分水岭?
  9. GroundTrue和里程计输出的位姿的参考坐标系不一致的情况
  10. lg显示器工厂模式怎么进入_一目了然 揭秘品牌LCD工厂模式进入方法