·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配? 如题,·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?假如a字符串为:as*bnc·b,b字符串为asdfgvbbnchb,则这俩个字符串匹配。

public class MyTest{

public static void main(String[] args) {

System.out.println(isMatch("as111111dfgvbbnchb","as*bnc.b"));

}

/**

* 动态规划法判断普通字符串是否与通配符字符串匹配。

*

*

* 算法思路:

* 设s为普通字符串,p为通bai配符字符串,字符串中字符编号以0起始。

* 申请布尔型数组 dp[s.length+1][p.length+1]。

* 1. dp[0][0]表示s为空串、p为空串时是否匹配,显然为true,dp[0][0]=true。

* 2. dp[0][j+1],0=

*    当dp[0][j]=true且p[j]='*'时,dp[0][j+1]=true。

*    如果dp[0][j]=false,即p[0..j-1]已经不能与空串匹配了,显然加上p[j]

*    也不能匹配。

*    如果p[j]!='*',则p[j]必须与一个字符匹配,而s为空串,显然不能匹配。

* 3. dp[i+1][j+1]表示s[0..i]与p[0..j]是否匹配。

*  3.1 如果p[j]='*',那么可以有两种匹配方式:

*      方式1. p[j]与s[i]匹配,s[i]被匹配掉后,还需判断s[0..i-1]是否与

*      p[0..j]匹配,故dp[i+1][j+1]=dp[i][j+1]。

*      方式2. p[j]不与s[i]匹配,这时还需判断s[0..i]是否与p[0..j-1]匹配,

*      故dp[i+1][j+1]=dp[i+1][j]。

*      综合两种情况,dp[i+1][j+1]=dp[i][j+1]||dp[i+1][j]。

*  3.2 如果p[j]='.',则p[j]必须和s[i]匹配,还需判断s[0..i-1]是否与

*      p[0..j-1]匹配,故dp[i+1][j+1]=dp[i][j]。

*  3.3 如果p[j]为其他字符并且与s[i]相同,则p[j]必须和s[i]匹配,还需判断

*      s[0..i-1]是否与p[0..j-1]匹配,故dp[i+1][j+1]=dp[i][j]。

*      这种情况可以与情况3.2合并。

* 最终 dp[s.length][p.length] 即表示s与p是否匹配。

*

*

* @param s

*          普通字符串。

* @param p

*          通配符字符串。

* @return 如果普通字符串与通配符字符串匹配则返回true,否则返回false。

*/

public static boolean isMatch(String s,String p) {

boolean[][] dp = new boolean[s.length()+1][p.length()+1];

dp[0][0]=true;

for(int j = 0;j

if(dp[0][j] && p.charAt(j) == '*') {

dp[0][j+1] = true;

}

}

for(int i = 0;i < s.length();i++) {

for(int j = 0;j < p.length();j++) {

if(p.charAt(j) == '*') {

dp[i+1][j+1] = dp[i][j+1]|| dp[i+1][j];

}else if(p.charAt(j) == '.' || p.charAt(j) == s.charAt(i)) {

dp[i+1][j+1] = dp[i][j];

}

}

}

return dp[s.length()][p.length()];

}

}

java匹配两个字符_·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?...相关推荐

  1. python 从字符串中随机选取4个字符_我需要一个Python函数,当给定字符的期望概率时,它将输出4个不同字符的随机字符串...

    对于四封信,我脑海中闪过的是:from random import random def randABCD(n, pA, pB, pC, pD): # assumes pA + pB + pC + p ...

  2. 借用该函数验证哥德巴赫猜想:任意一个大的偶数都可以分解成两个素数之和。

    定义一个函数,实现判断某个整数是否是素数.借用该函数验证哥德巴赫猜想:任意一个大的偶数都可以分解成两个素数之和.从键盘输入一个偶数,输出该偶数的两个素数之和. 代码段: #include <io ...

  3. python中怎么统计英文字符的个数_【Python练习1】统计一串字符中英文字母、空格、数字和其他字符的个数...

    练习思路: 1.输入一串字符 2.筛选出字符中的英文字母并统计 3.筛选出字符中的空格并统计 4.筛选出字符中的数字并统计 5.筛选出字符中的其他字符并统计 代码实现: def msg(s): abc ...

  4. char添加一个字符_给你五十行代码把图片变成字符画!程序:太多了,一半都用不完...

    今天和大家分享一个简单又好玩的Python项目–"图片转字符画".废话不多说,先上一个效果图迷惑一下众生. 没错的,图片转字符画就是将我们平常所看到的的图片根据像素RGB值和灰度值 ...

  5. shell文件通配符(9):任意一个:?、任意数量:*、任意包含[]、[^]:任意不包含

    文章目录 一. 有哪些文件通配符 二. 匹配任意 ?:匹配任意一个字符 *:匹配任意数量的字符串 三. 匹配任意指定一个字符 1. []:匹配任意包含 匹配任意包含 字符范围 2. [!]与[^]:匹 ...

  6. java 正则 第一个出现的字符_如何用正则表达式通过第一个出现的字符进行拆分?...

    更多追问追答 追问 只想用正则表达式,想一步到位 追答 用正则表达式比上面的方法麻烦,并且运行速度慢,你要非用正则表达式,不知下面这样的Java程序得到的结果,行不行.public class KK ...

  7. 如果java使用什么声明类_如果声明一个类时使用abstract修饰符,则表明该类是()_学小易找答案...

    [简答题]用 find 命令查找 /tmp 目录下以 vmlinuz 开头及大小超过 1M 的文件. [单选题]可以用 ( ) 来声明游标 [单选题]( )若用如下的SQL语句创建了一个SC表:CRE ...

  8. java从网页抓取图片_抓取一个网站特定的全部图片(JAVA)

    1. 目的 用五笔时,如果碰到不会拆的字,只好换回拼音.但这样做治标不治本,于是到网上找五笔反查工具.最后发现一个不错的网站--不仅有每个字对应的五笔码,还有其字根图.可惜的是,这是一个网站.换句说, ...

  9. angular过滤字符_如何使用Angular和Azure计算机视觉创建光学字符读取器

    angular过滤字符 介绍 (Introduction) In this article, we will create an optical character recognition (OCR) ...

  10. mysql用外键链接两个表_可能做一个MySQL外键的两个可能的表之一?

    你所描述的是多态关联.也就是说,"外键"列包含必须存在于一组目标表之一中的id值.通常,目标表以某种方式相关,例如一些常见的数据超类的实例.您还需要外键列旁边的另一列,以便在每行上 ...

最新文章

  1. 12/12 day06
  2. Python入门知识点总结
  3. cus.crm.notes.Component.extend(cus.crm.notes.ext.Component, {
  4. RHEL5下DNS配置详解3
  5. JDK 11:发行候选更新和OpenJDK JDK 11 LTS
  6. django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11
  7. 为何在wpf中textbox的值有时不会实时的变化
  8. 关于近期对自己的总结
  9. JPA学习笔记---JPA实体Bean的建立+配置文件+junit测试+自动生成(对应实体Bean的)数据库表+插入数据
  10. Mac Big Sur右上角时间变灰的解决方法
  11. C#中List〈string〉和string[]数组之间的相互转换
  12. [转载]树、森林和二叉树的转换
  13. 怎么提高Mysql执行sql导入的速度
  14. 2018 中国短视频开发者创意大赛震撼来袭,万元现金大奖邀你来战!
  15. Dart教程(三):类的定义和使用
  16. Powerpoint中VBA编程技巧
  17. 2008 r2 server sql 中文版补丁_sql2008 sp4补丁
  18. C++实现设计模式——Builder模式
  19. HTML静态网页设计
  20. 删除自定义reg注册表

热门文章

  1. C#并行编程(4):基于任务的并行
  2. ASP.NET Core如何在ActionFilterAttribute里做依赖注入
  3. .net core i上 K8S(四).netcore程序的pod管理,重启策略与健康检查
  4. 分析现有 WPF / Windows Forms 程序能否顺利迁移到 .NET Core 3.0
  5. 开源纯C#工控网关+组态软件(六)图元组件
  6. .NET Core快速入门教程 4、使用VS Code开发.NET Core控制台应用程序
  7. SaS中ne在mysql语句对应_SAS学习经验总结分享:篇四—SQL过程
  8. 遥感空间尺度转换技术(升尺度和降尺度)
  9. C#输入框InputBox问题
  10. Linux之软连接和硬链接