プランを受賞(leetcode 10)正規表現のマッチング

 

 この問題は、一年前やったブラシleetcodeに始まった、チューブを入れていなかったトラブルの数十を、提出しました。今日は、この問題が発生したのオファーを獲得し、最終的に出て来た、使用DP。

1  クラスソリューション{
 2  公共3。     BOOL IsMatch(ストリング S、文字P){
 4。         INT s_len s.size =()= p_len P.SIZE();
 5。          ベクトル<ベクトル< BOOL >> DP(+ s_len 1。 ベクトル< BOOL >(+ p_len 1偽に));
 6          // DP [I] [J]は、Sを表し、[0、I-1]、P [0、J-1]が合うことができる
7。          DP [ 0 ] [ 0 ] = trueに ; // 空の文字列は空の文字列にマッチする
8。         のためにint型iは= 1 ; I <= p_len; ++ I){
 9              DP [ 0 ] [I] = I> 1およびP [I- 1 ] == ' * 'およびDP [ 0 ] [I- 2 ]。
10          }
 11          のためにINT iは= 1 ; iが<= s_len; ++ I){
 12              のためにINT J = 1 ; J <= p_len; ++ j)は{
 13                  であれば(P [J- 1 ] == ' * ' ){
 14                      であれば(P [J- 2 ]!=" '){ // 数字+' *」
15                          DP [I] [J] = DP [I]、[J- 2 ]又は(S [I- 1 ] == P [J- 2 ]及び(DP [1- 1 ] [J- 2 ]又はDP [I- 1 ] [J- 1 )])。
16                      }
 17                       { // + '* ''' 
18                          のためのint型 K = I、K> = 0 ; - K){
 19                              であれば(DP [K] [J- 2 ]){
 20                                  、DP [I ] [J] = 21                                  ブレーク;
22                              }
 23                          }
 24                      }
 25                  }
 26                  他の 場合(P [J- 1 ] == ' ' ){
 27                      、DP [I] [J] = DP [I- 1 ] [J- 1 ]。
28                 }
 29  { // 数字30                      DP [I] [J] = P [J- 1 ] == S [I- 1 ]とDP [I- 1 ] [J- 1 ]。
                  
31                  }
 32              }
 33          }
 34          リターンdp.back()バック()。
35      }
 36 }。

 

おすすめ

転載: www.cnblogs.com/FdWzy/p/12293663.html