首页 > 代码库 > LeetCode 010 Regular Expression Matching - Java
LeetCode 010 Regular Expression Matching - Java
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
定位:困难题
题目给出两种匹配规则,即‘.‘能匹配任何字符,‘*‘可以将前面一个字符重复0到任意次。
此时我们将‘*‘与其前一个字符合看为一个单元考虑。存在以下情况:
- 两个字符串长度均为0,返回true;
- 前一个长度为0,后一个均为含‘*‘单元,返回true;
- 取前一个的前项字符与后一个前项字符,如若前一个前项为重复字符,取到不重复位置,后一个判断是否有‘*‘单元进行匹配,匹配正确去除已匹配部分将其余递归,不匹配返回false。
Java实现:
1 public class Solution { 2 public boolean isMatch(String s, String p) { 3 if(p.length()==0){ 4 return s.length()==0; 5 } 6 else if(s.length()==0) { 7 if(p.length()>1&&p.charAt(1)==‘*‘) return isMatch(s, p.substring(2)); 8 else return false; 9 } else if(p.length()>1 && p.charAt(1)==‘*‘) { 10 if(isMatch(s,p.substring(2))) return true; 11 else if(s.charAt(0)==p.charAt(0)||p.charAt(0)==‘.‘) { 12 return isMatch(s.substring(1), p); 13 } else return false; 14 } else { 15 return (s.charAt(0)==p.charAt(0) || p.charAt(0)==‘.‘) && isMatch(s.substring(1), p.substring(1)); 16 } 17 } 18 }
LeetCode 010 Regular Expression Matching - Java
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。