安全オファーを証明するために----顔質問19.正規表現のマッチング

リンク:https://leetcode-cn.com/problems/zheng-ze-biao-da-shi-pi-pei-lcof/

アイデア:

  状態手段:F [i] [j]はSを表し、[私は、..]とP [J、...]マッチ

  状態遷移:

  1.P [j]は通常の文字であり、F [i]は[J] = S [I] == P [J] && F [I + 1] [J + 1]

  2.P [J]是 ''、F [i]は[J] = F [I + 1] [J + 1]

  3.P [J + 1]是 '*'、F [i]は[J] = F [I] [J + 2] || F [I + 1] [J]

コード:

クラスのソリューション{
 パブリック
    ベクトル <ベクトル< int型 >> F。
    整数N、M。
    BOOL isMatch(ストリング S、文字列P){ 
        N = s.size()。
        M = p.size()。
        F =ベクトル<ベクトル< INT >>(N + 1、ベクトル< INT >(M + 1、 - 1 ))。
        F [n]は[M] = 1 
        DP(00 、S、P)。
        リターンDP(00 、S、P)。
    } 

    INT DP(int型のx、int型 Y、文字列&S、ストリングP)
    { 
        場合(F [X] [Y] =! - 1リターンF [X] [Y]。
        もし(Y == M)
             戻り F [X] [Y] = X == N。
        BOOL first_match = X <N &&(S [X] == P [Y] || P [Y] == ' ' );
        BOOL ANS;
        もし(Y + 1 <M && P [Y + 1 ] ==' * ' ){ 
            ANS = DP(X、Y + 2、S、P)|| first_match && DP(X + 1 、Y、S、P)。
        }                   
        
            ANS = first_match && DP(X + 1、Y + 1 、S、P)。
        リターン F [X] [Y] = ANS。
    } 
}。

 

おすすめ

転載: www.cnblogs.com/clown9804/p/12346575.html