zoukankan      html  css  js  c++  java
  • 10. Regular Expression Matching

    package LeetCode_10
    
    /**
     * 10. Regular Expression Matching
     * https://leetcode.com/problems/regular-expression-matching/description/
     *
     * Given an input string (s) and a pattern (p), 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).
    
    Example 1:
    Input:
    s = "aa"
    p = "a"
    Output: false
    Explanation: "a" does not match the entire string "aa".
    
    Example 2:
    Input:
    s = "aa"
    p = "a*"
    Output: true
    Explanation: '*' means zero or more of the preceding element, 'a'.Therefore, by repeating 'a' once, it becomes "aa".
    
    Example 3:
    Input:
    s = "ab"
    p = ".*"
    Output: true
    Explanation: ".*" means "zero or more (*) of any character (.)".
    
    Note:
    s could be empty and contains only lowercase letters a-z.
    p could be empty and contains only lowercase letters a-z, and characters like . or *.
     * */
    class Solution {
        /*
        * solution: recursion, Time complexity:O(n*n), Space complexity:O(n*n)
        * n is min(s.length, p.length)
        * */
        fun isMatch(s: String, p: String): Boolean {
            if (p == null || p.isEmpty()) {
                return s.isEmpty()
            }
            if (s == p) {
                return true
            }
            if (p.length >= 2 && p[1] == '*') {
                //if p's second character is *, so p can match any number of character before *
                if (isMatch(s, p.substring(2))) {
                    //check remaining character
                    return true
                }
                //otherwise, check first character match or not
                if (s.isNotEmpty() && (s[0] == p[0] || p[0] == '.')) {
                    return isMatch(s.substring(1), p)
                }
            } else if (s.isNotEmpty() && (s[0] == p[0] || p[0] == '.')) {
                //need check character one by one
                return isMatch(s.substring(1), p.substring(1))
            }
            return false
        }
    }
  • 相关阅读:
    CCF CSP 题解
    CCF CSP 2019032 二十四点
    CCF CSP 2018121 小明上学
    CCF CSP 2019092 小明种苹果(续)
    CCF CSP 2019091 小明种苹果
    CCF CSP 2019121 报数
    CCF CSP 2019031 小中大
    CCF CSP 2020061 线性分类器
    CCF CSP 2020062 稀疏向量
    利用国家气象局的webservice查询天气预报(转载)
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13203576.html
Copyright © 2011-2022 走看看