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));
            }
    
        }
    }

          

  • 相关阅读:
    使用office制作图章公章
    Office英语学习好帮手
    office快速制作简历
    如何使用office2010插入屏幕截图
    office 2010 安装教程
    360wifi使用方法|360wifi使用教程
    在我的电脑里新加一个盘符来隐藏文件夹和文件和秘密
    必应词典3.2去广告备忘笔记(转摘于roustar31)
    ASProtect注册码使用教程|ASProtect SKE(加壳脱壳工具) 2.56 汉化注册版
    ISTool5.3.1汉化版使用教程
  • 原文地址:https://www.cnblogs.com/skillking/p/9403638.html
Copyright © 2011-2022 走看看