/**
* Source : https://oj.leetcode.com/problems/regular-expression-matching/
*
* Created by lverpeng on 2017/6/30.
*
* * Implement regular expression matching with support for '.' and '*'.
*
* '.' Matches any single character.
* '*' Matches zero or more of the preceding element.
*
* The matching should cover the entire input string (not partial).
*
* The function prototype should be:
* bool isMatch(const char *s, const char *p)
*
* Some examples:
* isMatch("aa","a") → false
* isMatch("aa","aa") → true
* isMatch("aaa","aa") → false
* isMatch("aa", "a*") → true
* isMatch("aa", ".*") → true
* isMatch("ab", ".*") → true
* isMatch("aab", "c*a*b") → true
*
* =============== 关于星号 ===================
* isMatch("aab", "c*a*b") → true
* 星号是匹配前面一个字符零次或者多次,上面第一个星号前面是c,那么目标字符可以没有c,所以上面的结果是true
*
*/
public class RegularExpressMatching { /**
* . 匹配任意字符
* * 匹配前一个字符0次或者多次
*
* 如果pattern为空,str也为空,返回true,否则返回false
* 如果pattern的长度为1,str的长度也为1,两个字符相同或者pattern为 '.' 则返回true,否则返回false
* 如果pattern第二个字符不为'*' ,s长度为空返回false,否则,如果第一个字符相同或者p的第一个为 '.' 则递归比较s.subString(1) p.subString(1),否则返回false
* 如果pattern第二个字符为 '*' ,如果s不为空并且s和p第一个字符相同的时候:
* 匹配零次:递归比较s和p.subString(2),如果匹配成功返回true
* 匹配多次:将s向前移动一个字符进行匹配
* 如果s为空或者s、p第一个字符不匹配,递归匹配s和p.subString(2)
*
* @param s
* @param p
* @return
*/
public boolean isMatch (String s, String p) {
if (p.length() ==0) {
return s.length() == 0;
}
if (p.length() == 1) {
if (s.length() == 1 && (s.charAt(0) == p.charAt(0) || p.charAt(0) == '.')) {
return true;
}
return false;
}
if (p.charAt(1) != '*') {
if (s.length() == 0) {
return false;
}
return p.charAt(0) == '.' || p.charAt(0) == s.charAt(0) ? isMatch(s.substring(1), p.substring(1)) : false;
} while (s.length() != 0 && (p.charAt(0) == '.' || p.charAt(0) == s.charAt(0))) {
if (isMatch(s, p.substring(2))) {
return true;
}
s = s.substring(1);
}
return isMatch(s, p.substring(2));
} public static void main(String[] args) {
RegularExpressMatching regularExpressMatching = new RegularExpressMatching();
System.out.println(regularExpressMatching.isMatch("aa","a"));
System.out.println(regularExpressMatching.isMatch("aa","aa"));
System.out.println(regularExpressMatching.isMatch("aaa","aa"));
System.out.println(regularExpressMatching.isMatch("aa","a*"));
System.out.println(regularExpressMatching.isMatch("aa",".*"));
System.out.println(regularExpressMatching.isMatch("ab",".*"));
System.out.println(regularExpressMatching.isMatch("aab","c*a*b"));
} }

leetcode — regular-expression-matching的更多相关文章

  1. [LeetCode] Regular Expression Matching 正则表达式匹配

    Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...

  2. LeetCode | Regular Expression Matching

    Regular Expression Matching Implement regular expression matching with support for '.' and '*'. '.' ...

  3. [leetcode]Regular Expression Matching @ Python

    原题地址:https://oj.leetcode.com/problems/regular-expression-matching/ 题意: Implement regular expression ...

  4. [LeetCode] Regular Expression Matching(递归)

    Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...

  5. [LeetCode] Regular Expression Matching [6]

    称号: Implement regular expression matching with support for '.' and '*'. '.' Matches any single chara ...

  6. LeetCode——Regular Expression Matching

    Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...

  7. Leetcode:Regular Expression Matching分析和实现

    题目大意是要求我们实现一个简单的正则表达式全匹配判断.其中正则表达式中只包含一般字符,以及全匹配字符.和变长字符*.其中.可以匹配一个字符,而*与前一个字符相关联,x*可以被看作任意多个x(0到正无穷 ...

  8. LeetCode Regular Expression Matching 网上一个不错的实现(非递归)

    '.' Matches any single character.'*' Matches zero or more of the preceding element. The matching sho ...

  9. LeetCode: Regular Expression Matching 解题报告

    Roman to IntegerGiven a roman numeral, convert it to an integer. Input is guaranteed to be within th ...

  10. lc面试准备:Regular Expression Matching

    1 题目 Implement regular expression matching with support for '.' and '*'. '.' Matches any single char ...

随机推荐

  1. slf4j 日志组件

    slf4j:Simple Logging Facade for Java 官网:https://www.slf4j.org/

  2. service 设计问题

    今天写了一段让自己尴尬的代码,就是在一个方法中调用了两个 service 方法,而我为每个service 都定义了 事物回滚. 然后郁闷了,我执行请求调用该方法, 发现第二个service方法执行失败 ...

  3. Scrum冲刺阶段1

    各个成员在 Alpha 阶段认领的任务 人员 任务 何承华 美化设计 部分后端设计 陈宇 后端设计 丁培辉 美化设计 部分后端设计 温志铭 前端设计 杨宇潇 服务器搭建 张主强 前端设计 明日各个成员 ...

  4. python发送邮箱

    一.Python发送邮件 import smtplib from email.mime.text import MIMEText def send(email_to,title,content): m ...

  5. Unity的几个特殊文件夹

    1.以.开头的文件夹会被unity忽略,资源不会被导入,脚本不会编译. 2.Standard Assets和Pro Standard Assets:在这个文件夹中的脚本最先被编译. 3.Editor: ...

  6. POJ1862 Stripies 贪心 B

    POJ 1862 Stripies https://vjudge.net/problem/POJ-1862 题目:     Our chemical biologists have invented ...

  7. spring中的aop演示

    一.步骤(XML配置) 1.导包4+2+2+2 2.准备目标对象 3.准备通知 4.配置进行织入,将通知织入目标对象中 <! -- 3.配置将通知织入目标对象> 5.测试 二.步骤(注解配 ...

  8. collection管理程序中不同类别的资源

    在一个计算图中,可以通过collection管理不同类别的资源,如通过tf.add_to_collection函数可以将资源加入一个或多个集合中,然后通过tf.get_collection获取一个集合 ...

  9. DWARF 中的 Debug Info 格式

    本周花了几天的时间来研究怎么在 breakpad [1, 2] 中加入打印函数参数的功能,以期其产生的 callstack 更具可读性,方便定位崩溃原因. 现代 ELF 中的调试信息基本是以 DWAR ...

  10. Python PIL 库的应用

    PIL (Python Image Library) 库是Python 语言的一个第三方库,PIL库支持图像存储.显示和处理,能够处理几乎所有格式的图片. 一.PIL库简介 1. PIL库主要有2个方 ...