LeetCode:10正規表現マッチング(Java)


LeetCode:10正規表現マッチング
文字列(s)と文字モード§を指定します.サポートを実現「*」の正規表現と一致します.
'.'         。
'*'             。

一致は、部分文字列ではなく、文字列全体(s)を上書きする必要があります.
説明:
s     ,      a-z      。
p     ,      a-z      ,     .   *。

例1:
  :
s = "aa"
p = "a"
  : false
  : "a"      "aa"      。

例2:
  :
s = "aa"
p = "a*"
  : true
  : '*'                ,       'a' 。  ,    'a'   ,        "aa"。

例3:
  :
s = "ab"
p = ".*"
  : true
  : ".*"           ('*')    ('.')。

例4:
  :
s = "aab"
p = "c*a*b"
  : true
  : 'c'       , 'a'        。          "aab"。

例5:
  :
s = "mississippi"
p = "mis*is*p*."
  : false

コードは次のとおりです.
public class Solution {
    public boolean isMatch(String text, String pattern) {
    	//          
        if (pattern.isEmpty()) return text.isEmpty();
        
        //        
        boolean first_match = (!text.isEmpty() && (pattern.charAt(0) == text.charAt(0) || pattern.charAt(0) == '.'));
        
        if (pattern.length() >= 2 && pattern.charAt(1) == '*') {
            //      ,   pattern      text
            //      ,   text    pattern
            //isMatch(text, pattern.substring(2))   p    * ,                ,   *  *                 ,       pattern.substring(2)
            //           ,        * ,                             (*   ),   first_match && isMatch(text.substring(1), pattern))   
            return (isMatch(text, pattern.substring(2)) ||
                (first_match && isMatch(text.substring(1), pattern)));
        } else {
            //       :       ,     text,      pattern,            ,  s p                  
            return first_match && isMatch(text.substring(1), pattern.substring(1));
        }
    }
}

この文書の参照:https://blog.csdn.net/hit1110310422/article/details/80791446