通配符(?,*)匹配算法Java
动态规划
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相关推荐
- 动态规划——通配符匹配算法
-----Edit by ZhuSenlin HDU 设计通配符匹配算法,其中*号可以匹配任意多个字符,?号可以匹配任意一个字符.例如12345和12*.12*?以及12*4?等都匹配. 函数原型为: ...
- java main是标识符吗_main方法的认识 、通配符、java的注释、java的符(标识符)【Java基础】...
main方法的认识 print()和println()的区别 print()打印不换行 println()打印并换行 通配符 \n换行符\t制表符都应用于控制台 \n换行 \t以表格的形式显示 Sys ...
- java配u型你,泛型方法上的多个通配符使Java编译器(还有我!)很迷茫
如附录B所示,这与多个通配符无关,而是误解了什么List>真的意味着. 让我们首先提醒自己,Java泛型是不变的,这意味着什么:阿 Integer是 Number A List是 不 a Lis ...
- 括号匹配算法 java_使用栈实现括号匹配算法-java
题目:检验符号是否匹配. '['和']', '('和')'成对出现时字符串合法. 例如"[][]()", "[[([]([])()[])]]"是合法的; &qu ...
- Java泛型解析(02):通配符限定
Java泛型解析(02):通配符限定 考虑一个这种场景.计算数组中的最大元素. [code01] public class ArrayUtil {public static <T> ...
- java泛型(三)、通配符的使用
通配符有三种: 1.无限定通配符 形式<?> 2.上边界限定通配符 形式< ? extends Number> //用Number举例 3.下边界限定通配符 形 ...
- [实用][更新中]Java Apache POI 打印Word文档工具(含文本替换,动态表格功能)
[实用][更新中]Java Apache POI 打印Word文档工具(含文本替换,动态表格功能) 基于Apache POI对Word进行操作 一.基于Apache POI封装的word文档工具V1. ...
- java基础知识点_「Java面试题/知识点精华集」20000+字的Java基础知识篇(2020最新版) !
" 本文已经收录进我的 79K Star 的 Java 开源项目 JavaGuide:https://github.com/Snailclimb/JavaGuide (「Java学习+面试指 ...
- Lucene 的四大索引查询 ——bool 域搜索 通配符 范围搜索
Lucene 的四大索引查询 清单1:使用布尔操作符 Java代码 //Test boolean operator blic void testOperator(String index ...
最新文章
- 关于VS2017中fopen、fscanf等函数无法使用的问题
- 用同一uuid作为两个字段的值_这两个小技巧,让SQL语句不仅躲了坑,还提升了 1000 倍...
- phpMyAdmin导入大的sql文件
- 【POJ - 3352】Road Construction(Tarjan,边双连通分量)
- mysql 窗口函数_MySQL数分:窗口函数
- 设置mysql允许外网访问
- 华为机试题输入输出总结
- 号称是世界最大的电子书图书馆ZLibrary
- 使用Photoshop制作圣诞海报
- chromium git下载
- Windows10 最新版官方iso镜像(截至2021/02)win10 2009(20h2)
- 北京大学C语言学习第三天
- 在《王者荣耀》来聊聊游戏的帧同步
- 游戏本地化不止是翻译,还有……
- Quantopian自学笔记04
- 图/树——宽度优先搜索(BFS)
- 产品经理也要懂ASO
- 小屁孩的伤感空间日志_多谢伱的不珍惜让我学会死訫
- 堡垒主机在信息安全等级保护制度中的探究与应用
- 《量化炼金术-中低频量化交易策略研发》读书笔记-序言,引言
热门文章
- 服务器配置对shtml支持(nginx 或 tomcat)
- 水星迷你无线路由器ap模式 下要不要启用 dhcp服务器,水星(Mercury)Mini无线路由器AP模式设置...
- Matlab实现幅度调制详解
- 基于matlab的正交振幅调制与解调,正交幅度调制(QAM)及解调Matlab仿真
- [laravel]laravel用户认证及api认证,session,cookie,api_token
- python嵌入式脚本_基于Python的嵌入式脚本研究
- Openjudge1.4答案
- 为什么年薪 50W 是程序员的分水岭?
- GroundTrue和里程计输出的位姿的参考坐标系不一致的情况
- lg显示器工厂模式怎么进入_一目了然 揭秘品牌LCD工厂模式进入方法