微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

leetcode 10.Regular Expression Matching(正则表达式匹配) 解题思路和方法

Regular Expression Matching

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


这题难度为hard,最主要的实现方法是用递归方法,先判断边界条件,然后再判断p字符串中第二个字符时候为*,分情况讨论。

具体代码和注释如下:

public class Solution {
    public boolean isMatch(String s,String p) {
        if (s == null)
            return p == null;
        if (p == null)
            return s == null;
 
        int lenS = s.length();
        int lenP = p.length();

        if (lenP == 0)
            return lenS == 0;
        
        if(lenP == 1){
            if(lenS == 1){
                if(p.equals(".") || p.equals(s)){
                	return true;
                }
            }
            return false;
        }
        //字符后为*
        if(p.charat(1) == '*'){
        	  int i = 0;
        	  while(s.length() > 0 && isEquals(s.charat(0),p.charat(0))){
        		  //如果截取p的两位后还能匹配,则返回true,如果不能,s截取前i位后与p重新匹配
        		  if(isMatch(s,p.substring(2)))
                      return true;
        		  s = s.substring(1);
        	  }
        	  return isMatch(s.substring(i),p.substring(2));
        }
        //字符后不为*
        else{
        	if(lenS > 0 && isEquals(s.charat(0),p.charat(0))){
        		return isMatch(s.substring(1),p.substring(1));
        	}
        	else{
        		return false;
        	}
        }
    }
    
    //判断是否相等
    public static boolean isEquals(char x,char y){
        if(x == y || y == '.'){
            return true;
        }
        return false;
    }
}

原文地址:https://www.jb51.cc/regex/360196.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐