LeetCode_OJ【10】Regular Expression Matching
2015-09-10 10:25
295 查看
Implement regular expression matching with support for
这道题花了好久才弄清楚题意,a*可以表示任意个a的字符串如:“aa”,"aaa",空串也可以由它表示。
这样.*就可以表示任意位数的任意字符,所以可以表示所有字符。
很多人不理解最后一个例子为什么输出true,这里解释下:首先c*匹配空串,a*匹配“aa”,最后b完全匹配,所以匹配成功。
这个题目可以用动态规划求解,根据p串第二个字符是否为‘*’分为两种情况。
以下分别是该题C和JAVA的实现,c实现起来比较方便,java则要注意数组会不会越界。
C语言:
JAVA:
'.'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
这道题花了好久才弄清楚题意,a*可以表示任意个a的字符串如:“aa”,"aaa",空串也可以由它表示。
这样.*就可以表示任意位数的任意字符,所以可以表示所有字符。
很多人不理解最后一个例子为什么输出true,这里解释下:首先c*匹配空串,a*匹配“aa”,最后b完全匹配,所以匹配成功。
这个题目可以用动态规划求解,根据p串第二个字符是否为‘*’分为两种情况。
以下分别是该题C和JAVA的实现,c实现起来比较方便,java则要注意数组会不会越界。
C语言:
bool isMatch(char* s, char* p) { if(*p == '\0') return *s == '\0'; if(*(p+1) != '*'){ if(*p == *s || (*p == '.' && *s != '\0' ) ) return isMatch( s+1 , p+1); return false; } else { while(*p == *s || (*p == '.' && *s != '\0' )){ if(isMatch(s,p+2)) return true; s++; } return isMatch(s,p+2); } }
JAVA:
public class Solution { public boolean isMatch(String s, String p) { if("".equals(p)) return "".equals(s); if(p.length() == 1 || p.charAt(1) != '*'){ if(!"".equals(s) && ( p.charAt(0) == s.charAt(0) || p.charAt(0) == '.' ) ){ return isMatch(s.substring(1),p.substring(1)); } return false; } else{ while(!"".equals(s) && ( p.charAt(0) == s.charAt(0) || p.charAt(0) == '.' ) ){ if(isMatch(s, p.substring(2))) return true; s = s.substring(1); } return isMatch(s,p.substring(2)); } } }
相关文章推荐
- 基于Android中dp和px之间进行转换的实现代码
- Android中dip、dp、sp、pt和px的区别详解
- LFC1.0.0 版本发布
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- Android px、dp、sp之间相互转换
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- android中像素单位dp、px、pt、sp的比较
- LeetCode[Day 1] Two Sum 题解