# 题目

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

# 分析

1.p的第二个字符是‘ * ’

2. p的第二个字符不是‘ * ’

# 代码（Java）

public class RegularExpressionMatching {

public boolean isMatch(String s,String p){

if (p.length()==0) {
return s.length()==0;
}
//p的长度为1
if (p.length()==1) {
if (s.length()<1) {
return false;
}
else if ((p.charAt(0))!=s.charAt(0)&&p.charAt(0)!='.') {
return false;
}
else {
return isMatch(s.substring(1), p.substring(1));
}
}

if (p.charAt(1)!='*') {
if (s.length()<1) {
return false;
}
else if ((p.charAt(0))!=s.charAt(0)&&p.charAt(0)!='.') {
return false;
}
else {
return isMatch(s.substring(1), p.substring(1));
}
}

else {
if (isMatch(s, p.substring(2))) {
return true;
}
}

int i=0;
while(i<s.length()&&(s.charAt(i)==p.charAt(0)||p.charAt(0)=='.')){
if (isMatch(s.substring(i+1), p.substring(2))) {
return true;
}
i++;
}
return false;
}

public static void main(String[] args) {
System.out.println(new RegularExpressionMatching().isMatch("aa","a"));
System.out.println(new RegularExpressionMatching().isMatch("aa","aa"));
System.out.println(new RegularExpressionMatching().isMatch("aaa","aa"));
System.out.println(new RegularExpressionMatching().isMatch("aa", "a*"));
System.out.println(new RegularExpressionMatching().isMatch("aa", ".*"));
System.out.println(new RegularExpressionMatching().isMatch("ab", ".*"));
System.out.println(new RegularExpressionMatching().isMatch("aab", "c*a*b"));
System.out.println(new RegularExpressionMatching().isMatch("aab", "c*a*cbaab"));
}
}

# 引用

http://www.programcreek.com/2012/12/leetcode-regular-expression-matching-in-java/

• 本文已收录于以下专栏：

## [LeetCode][10]Regular Expression Matching解析 -Java实现

Q： Implement regular expression matching with support for '.' and '*'. '.' Matches any single ...
• u014629433
• 2016年06月11日 14:38
• 1954

## 10. Regular Expression Matching（很重要!!!）

Implement regular expression matching with support for '.' and '*'. '.' Matches any single character...
• gao1440156051
• 2016年08月15日 17:15
• 756

## 【LeetCode010算法/编程练习C++】Regular Expression Matching//挺烦的一条……

10. Regular Expression Matching Total Accepted: 113015 Total Submissions: 481908 Difficulty: ...
• zmdsjtu
• 2016年12月27日 16:09
• 542

## 10. Regular Expression Matching-动态规划/递归回溯

mplement regular expression matching with support for '.' and '*'. '.' Matches any single character...
• u011567017
• 2016年09月11日 21:40
• 597

## [LeetCode] 010. Regular Expression Matching (Hard) (C++/Java/Python)

[LeetCode] 010. Regular Expression Matching (Hard) (C++/Java/Python)
• hcbbt
• 2015年03月02日 11:20
• 4637

## LeetCode题解--10. Regular Expression Matching

• gatieme
• 2016年04月03日 11:40
• 3169

## Regular Expression Matching -- LeetCode

• linhuanmars
• 2014年03月16日 16:16
• 27378

## Leetcode: Regular Expression Matching

Implement regular expression matching with support for '.' and '*'. '.' Matches any single character...
• doc_sgl
• 2013年10月14日 23:09
• 19692

## 《LeetBook》leetcode题解(10): Regular Expression Matching——DP解决正则匹配

010. Regular Expression Matching 这里面最复杂的操作是"*"，这是个很可恶的操作，因为你永远不知道它多长。但是有一点，"*"不会单独出现，它一定是和前面一个字母或"."...
• hk2291976
• 2016年04月15日 21:50
• 2942

## leetcode 10: Regular Expression Matching 分析及解答

• u012150792
• 2016年07月22日 20:56
• 361

举报原因： 您举报文章：Regular Expression Matching in Java 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)