正規表現をDFS

192ワイルドカードマッチング

中文
英語

二つの裁判官は、ワイルドカード「?」や「*」文字列の一致が含まれていてもよいです。次のようにマッチングのルールは以下のとおりです。

  • 「?」は任意の1文字に一致します。
  • 「*」(空の文字列を含む)任意の文字列にマッチします。

2つの文字列完全一致は成功したと一致すると見なされています。

サンプル

サンプル1

输入:
"aa"
"a"
输出: false

出力2

输入:
"aa"
"aa"
输出: true

出力3

输入:
"aaa"
"aa"
输出: false

出力4

输入:
"aa"
"*"
输出: true
说明: '*' 可以替换任何字符串

出力5

输入:
"aa"
"a*"
输出: true

サンプル6

输入:
"ab"
"?*"
输出: true
说明: '?' -> 'a' '*' -> 'b'

サンプル7

输入:
"aab"
"c*a*b"
输出: false


クラスのソリューション:
    "" " 
    @param S:文字列
    ?@paramのP:文字列が含まれて""と"*" 
    @return:?マッチは
    """ 
    DEF isMatch(自己、S、P): ここにあなたのコードを書きます
        self.cache = {} 
        戻りself.helper(S、P、s_at = LEN(S)-1、p_at = LEN(P)-1)
        
        
    デフヘルパー(自己、S、P、s_at、p_at):
        IF(s_at self.cacheで、p_at):
            戻りself.cache [(s_at、p_at)] 
            
        であればp_at <0:
            s_atリターン<0 
        
        s_at <0の場合:
            iに対して範囲(0、p_at + 1)において:
                もしP [I] != "*":
                    Falseを返す
            戻り値がTrue
        
        もしP [p_at] == '?':
            is_match = self.helper(S、P、s_at-1、p_at-1)
        のelif P [p_at] == '*':
            is_match = self.helper(S、P、 s_at-1、p_at)または\ 
                    self.helper(S、P、s_at、p_at-1)
        他:
            is_match = s_at> = 0とS [s_at] == P [p_at]と\ 
                   self.helper(S、P 、s_at-1、p_at-1)
        self.cache [(s_at、p_at)]はis_match = 
        戻りis_matchを

 その後の時間外、あなたはキャッシュしない場合があります。

 

おすすめ

転載: www.cnblogs.com/bonelee/p/11707288.html