10. Regular Expression Matching
Posted skillking
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)); } } }
以上是关于10. Regular Expression Matching的主要内容,如果未能解决你的问题,请参考以下文章
10. Regular Expression Matching
10. Regular Expression Matching
10. Regular Expression Matching
10. Regular Expression Matching