LeetCode:10正規表現マッチング(Java)
7057 ワード
LeetCode:10正規表現マッチング
文字列(s)と文字モード§を指定します.サポートを実現「*」の正規表現と一致します.
一致は、部分文字列ではなく、文字列全体(s)を上書きする必要があります.
説明:
例1:
例2:
例3:
例4:
例5:
コードは次のとおりです.
この文書の参照:https://blog.csdn.net/hit1110310422/article/details/80791446
文字列(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