当前位置: 首页 > news >正文

官方网站的域名东莞公司网站价格

官方网站的域名,东莞公司网站价格,网站html下载器,番禺南村网站建设10. 正则表达式匹配(困难) 题解 如果从左向右进行匹配的话,需要考虑字符后是否有 * 。 因此选择从右向左扫描更为简单。 *前面肯定有一个字符,它像是一个拷贝器,能够复制前面的单个字符,甚至也可以把这个…

10. 正则表达式匹配(困难)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 题解

    • 如果从左向右进行匹配的话,需要考虑字符后是否有 * 。

      在这里插入图片描述

    • 因此选择从右向左扫描更为简单。

      *前面肯定有一个字符,它像是一个拷贝器,能够复制前面的单个字符,甚至也可以把这个字符消除(出现 0 次)。

      两个字符串是否匹配,取决于最右边的字符是否匹配,以及剩余的子串是否匹配。其中,「剩余的子串是否匹配」,就是本道题的子问题

      在这里插入图片描述

    • 状态定义:定义 dp[i][j] 为第一个字符串到 i 为止,第二个字符串到 j 为止,两个字符串是否匹配。如果匹配,dp[i][j] = true;如果不匹配,dp[i][j] = false

    • 子问题的考虑

      • 情况一:s[i-1] 和 p[j-1] 匹配,即 s[i-1] == p[j-1] || p[j-1] == '.'。那么只需要考虑剩余的子串是否匹配,即 dp[i][j] = dp[i-1][j-1];

        在这里插入图片描述

      • 情况二:s[i-1] 和 p[j-1] 不匹配。这时候不能直接认为两个字符串不匹配,而是需要进一步考虑 p[j-1] == '*' 的情况。但是如果不是 * ,那么肯定不匹配。

        在这里插入图片描述

        对于 * ,它可以匹配 0 个或多个字符。当s[i-1] 和 p[j-2] 匹配,且 p[j-1] == ‘*’ 时,需要考虑三种情况: * 使 dp[j-2] 出现 0 次、1 次或 >=2次。只要其中一种情况能使得两个子串匹配,我们就可以继续考虑剩余子串是否匹配。状态转移方程为:dp[i][j] = dp[i][j-2] || dp[i-1][j-2] || dp[i-1][j];

        在这里插入图片描述
        当s[i-1] 和 p[j-2] 不匹配,且 p[j-1] == ‘*’ 时,可以利用 * 消除不匹配字符 p[j-2],考虑 s[i-1] 和 p[j-3] 是否匹配。状态转移方程为:dp[i][j] = dp[i][j-2];

    • 初始情况:当两个字符串都是空串的时候,一定匹配,因此 dp[0][0] = true; ;当 s 为空时,如果 p 的右端字符是 * ,那么就可以使得 p 也变成空串;当 p 为空,两个字符串一定不匹配。

  2. 代码

    class Solution {
    public:bool isMatch(string s, string p) {int m = s.size(), n = p.size();vector<vector<bool>> dp(m+1, vector<bool>(n+1, false));// 两个空字符串一定匹配dp[0][0] = true;// 如果s为空串 p[j-1]=* 也能够匹配for(int j=1; j<=n; ++j){if(p[j-1] == '*'){dp[0][j] = dp[0][j-2];}}// 从右向左匹配for(int i=1; i<=m; ++i){for(int j=1; j<=n; ++j){// s[i-1]和p[j-1]匹配if(s[i-1] == p[j-1] || p[j-1] == '.'){dp[i][j] = dp[i-1][j-1];}// s[i-1]和p[j-1]不匹配else{// p[j-1] == '*' 且 s[i-1]和p[j-2]匹配if(p[j-1] == '*'){dp[i][j] = dp[i][j-2];if(s[i-1] == p[j-2] || p[j-2] == '.'){dp[i][j] = dp[i][j-2] || dp[i-1][j-2] || dp[i-1][j];}}}}}return dp[m][n];}
    };
    
  3. 收获

    • 理解错了 * 的意思,* 类似于一个拷贝器 ,能匹配前一个元素,也能消除前一个元素(匹配零个)。
    • 这道题需要考虑多种情况,感觉很难想得这么全面。
http://www.lakalapos1.cn/news/3531/

相关文章:

  • 做国外的网站自己做的网站怎么放上网
  • 哪些网站可以接设计的单子做广告费计入什么科目
  • 网站安全访问上海企业服务
  • 简述网站的四种常见结构如何查看实时街景地图
  • 建立个人网站用虚拟主机注册网站一年多少钱
  • 南充市房产信息网官网seo网络排名优化哪家好
  • 购物网站商城珠宝玉器监测网站建设方案
  • 网络营销推广技巧上海seo推广整站
  • 如何购买网站服务器做解密类网站可行
  • 建设部网站官网办事大厅外贸婚纱网站
  • 性男女做视频网站怎么用域名做邮箱网站
  • 用DW做网站时怎么在新窗口打开教育培训类网站建设与维护
  • 自己设计好的网站怎么设置访问河南网站推广多少钱
  • 视频网站开发费用游戏网站建设杭州
  • 英语网站新增两个栏目服装logo设计
  • seo专业为网站建设Wordpress建站安装教程图解
  • 台州建站平台沈阳网站推广¥做下拉去118cr
  • 做调查问卷赚钱哪个网站好网站衣服模特怎么做
  • 贵阳网站设计公司个人网站制作软件哪个好
  • 烟台网站建设比较大的网站开发都有
  • 做ppt好的网站有哪些张家港百度网站推广
  • 做建材去什么网站国外好的电商网站有哪些
  • 网站设计英文翻译商城app下载安装
  • 网站建设及推广衬胶蝶阀wordpress 数据库查询
  • 网站域名注册机制wordpress教程书本
  • 网站整体风格设计免费金融发布网站模板下载
  • 网站地图怎么做wordpress商城付款
  • 网站建设与网站优化销售安卓app用什么语言开发
  • 现在搜什么关键词能搜到网站阜宁县网站建设
  • 如何把网站主关键词做到百度首页公司手机网站模板免费下载