【leetcode】10. Regular Expression Matching正则表达式匹配

地址:https://leetcode.com/problems/regular-expression-matching/description/

思维:

  • 若p为空,若s也为空,返回true,反之返回false
  • 若p的长度为1,若s的长度也为1,且相同或者p为’.’,那么返回true,否则返回false;
  • 若p的第二格字符不为*,且s是空的,那返回false,如果s不为空,且第一个字符相同,那么开始调用递归匹配除第一个字符的字符串。
  • 若p的第二个字符是*,那么当s不为空,开始匹配,(在第一个字符相同的基础上)调用递归匹配s和去掉前两个字符的p,若匹配返回true,否则s去掉首字母
  • 返回调用递归函数匹配s和去掉前两个字符的p的结果
    代码:
 //利用递归的思维,对字符串进行截取比较
    public static boolean isMatch(String s, String p) {
        if (p.isEmpty()) return s.isEmpty();//第一种情况:如果p是空的话,那么返回是否为空
        if (p.length() == 1){//第二种情况:如果p的长度是1的话,那么只需要判断s的长度是1且两个相同,或者p是"."
            return s.length() == 1 && (s.charAt(0) == p.charAt(0) || p.charAt(0)=='.');
        }
        if (p.charAt(1) != '*'){
            if (s.isEmpty()) return false;
            return (s.charAt(0) == p.charAt(0) || p.charAt(0) == '.') && isMatch(s.substring(1),p.substring(1));
        }
        while (!s.isEmpty() && (s.charAt(0) == p.charAt(0) || p.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) {
        System.out.println(isMatch("ab",".a"));
    }

猜你喜欢

转载自blog.csdn.net/qq_37355731/article/details/82951017
今日推荐