[ダイナミックプログラミング】leetcode 44ワイルドカードマッチング

問題:https://leetcode.com/problems/wildcard-matching/

        メモリ検索でエラーを起こしやすいしませんでした。

クラスのソリューション{
 パブリック
    ベクトル <ベクトル< int型 >> DP;
    BOOL isMatch(CONST  文字列&S、CONST  文字列&P、int型 I、INT J)
    { 
        場合(I> = s.size()&& J> = p.size())を返す もし(J> = p.size())を返す もし(!DP [I] [J] = 2リターンDP [I] [J]。
        あれば(私はs.size()&&(S [i]を== P [J] || P [J] == < " ' ))
        { 
            戻り DP [I] [J] = isMatch(S、P、I + 1、J + 1 )。
        } 
        もし(P [j] == ' * ' 
        { 
            ためのint型 ; kは<= s.size(); K = IをK ++ 
            { 
                場合(isMatch(S、P、K、J + 1))を返す DPを[I] [j]は= 
            } 
        } 
        戻り DP [i]は[J] = 
    } 
    BOOL isMatch(ストリング S、文字列P){
        dp.resize(s.size() + 1、ベクトル< INT >(p.size()+ 12 ))。
        戻り isMatch(S、P、00 ); 
    } 
}。

 非再帰:

クラスのソリューション{
 パブリック
    ベクトル <ベクトル< ブール >> DP;
    BOOL isMatch(ストリング S、ストリングP){ 
        dp.resize(s.size() + 1、ベクトル< BOOL >(p.size()+ 1 ))。
        
        DP [ 0 ] [ 0 ] = int型 iは= 1 ; I <= s.size()iが++ 
        { 
            DP [I] [ 0 ] = 
        } 
        のためにINT J = 0 ; J <p.size(); J ++ 
        { 
            場合(P [j] == ' * ')DP [ 0 ] [J + 1 ] = 他に 休憩; 
        } 
        のためのint型 I = 0 ; iが(s.sizeを<); iが++ 
        { 
            ためINT J = 0 ; J <p.size(); J ++ 
            { 
                場合(P [j] == ' * ' 
                { 
                    DP [私は +1 ] [J + 1 ] = DP [I + 1 ] [J] || DP [I]、[J + 1 ]。
                } 
                
                { 
                    DP [I + 1 ] [j + 1 ] =(S [I] == P [J] || P [J] == ' ')&& DP [I] [J]。
                } 
            } 
        } 
        戻りDP [s.size()] [p.size()]。
    } 
}。

 

おすすめ

転載: www.cnblogs.com/fish1996/p/11329889.html