码迷,mamicode.com
首页 > 其他好文 > 详细

10. Regular Expression Matching

时间:2018-08-01 22:32:06      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:src   color   题目   大于   string   img   col   info   重复   

一、题目

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

    }
}

 

      

 

10. Regular Expression Matching

标签:src   color   题目   大于   string   img   col   info   重复   

原文地址:https://www.cnblogs.com/skillking/p/9403638.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!