zoukankan      html  css  js  c++  java
  • 10. Regular Expression Matching

    一、题目

      1、审题:

        

      2、分析:

        两个字符串,其中 '.' 可以代表任意一个字符; ‘*‘ 代表0或多个前一个字符的长度扩充, 判断 两字符串是否可以匹配;

    二、解答

      1、分析: 

        a、当 p 长度为 0 时,只需判断 s 长度是否为0

        b、当 s 长度为 0 时,看 p 的第二个字符是否为 * :

          Y: 递归判断 s 与 p.substr(2) 是否匹配

          N:返回 false;

        c、当 p 长度大于 1 ,并且 p 第二个字符为 *:

          c1: 若 s 与 p.substr(2) 匹配,则返回 true;否则 c2;

          c2: 若 s 第一个字符与 p第一个相同,或 p第一个字符为 . ,则 s 依次 减少一个字符进行匹配判断;

          c3: 返回 false;

        d、递归判断 s 与 p 每一个字符是否相同;

    class Solution {
        public boolean isMatch(String s, String p) {
            //  .  单个任意字符;  // * 0 或多个前一个字符;
            if(p.length() == 0)     // p 为 空
                return s.length() == 0;
            else if(s.length() == 0) {  // s 为 空
    
                if(p.length() > 1 && p.charAt(1) == '*')  // s为空 p 非空时,只有 p第二个字符为 * 才能匹配;
                    return isMatch(s, p.substring(2));
                else
                    return false;
            }
            else if( p.length() > 1 && p.charAt(1) == '*') {
    
                if(isMatch(s, p.substring(2)))
                    return true;
                else if(s.charAt(0) == p.charAt(0) || p.charAt(0) == '.')
                    return isMatch(s.substring(1), p);  // s 中递减 重复字符
                else
                    return false;
            }
            else {
                return (s.charAt(0) == p.charAt(0) || p.charAt(0) == '.')
                        && isMatch(s.substring(1), p.substring(1));
            }
    
        }
    }

          

  • 相关阅读:
    一些常用的代码评审工具
    Atlassian旗下一干team build软件
    Jira功能全介绍
    项目经验分享
    网址、下载地址
    Java 字节码解读
    Gitlab 安装
    博客园设置
    mybatis 遇到空串无法判断
    Shell 脚本入门
  • 原文地址:https://www.cnblogs.com/skillking/p/9403638.html
Copyright © 2011-2022 走看看