PATグレード--A1040最長の対称文字列

文字列を考えると、あなたは出力最長の対称部分文字列の長さになっています。例えば、与えられた  Is PAT&TAP symmetric?、最長の対称部分文字列がある  s PAT&TAP sので、あなたが出力する必要があり、  11

入力仕様:

各入力ファイルには、1000年を超えない長さの非空の文字列を与える一つのテストケースが含まれています。

出力仕様:

各テストケースのために、単に行の最大長を印刷します。

サンプル入力:

Is PAT&TAP symmetric?

サンプル出力:

11


1の#include <iostreamの>
 2の#include < ストリング >
 3の#include <アルゴリズム>
 4  
5  使用 名前空間STDを、
6  文字列strの、T1、T2。
7  INT RES = 1 8  // 最普通的遍历
9  ボイドWAY1()
 10  {
 11      のためにint型 i = 0 ; iはstr.lengthを()<; ++ I)
 12      {
 13          のためにINT J = str.length() - 1 ; J> I; -J)
 14          {
 15              t1.assign(str.begin()+ I、str.begin()+ + J 1。);
 16              t2.assign(t1.rbegin()、t1.rend());
 17              IF(T1 == T2)
 18は、                  RES = RES> t1.length()?RES:t1.length();
 19          }
 20      }
 21れる }
 22は 
23である 。// 同じ回文ストリングの中心の両側使用
24  空隙ウェイ2を()
 25  {
 26である     ためint型 I = 0 ;私は(str.sizeを<); ++ I)は{
 27          INTJ;
 28          (J = 1 ; I - J> = 0 && I +はJ <str.size()&& STRは== STR [I - J] [Iは、J +]; J ++); // 現在の最長文字パリンドロームパリンドロームストリングの中心を見つける
29の          RES = MAX(RES、2 * J - 1); // パリンドロームストリングの最大長更新
30を         するため(J = 0 ; I - Jは> = 0 && Iは、Jを+ + 1。 <str.size()&& STR [I - J] == STR [Iが+ 1 + J]; J ++); // 現在の文字が最も長いパリンドロームパリンドロームストリングの左中央の文字である見つけるために
31          最大=のRES(RES、2 * J); //はパリンドロームストリングの最大長更新
32      }
 33  }
34  
35  // 使用动态规划
36  空隙ウェイ3()
 37  {
 38      のint DP [ 1010 ] [ 1010 ]。
39      のためにint型 I = 0 ; I <str.length(); iが++ 40      {
 41          DP [i]は[I] = 1 42          であれば(私はstr.length()< - 1つの && STR [I] == STR [I + 1 ])
 43          {
 44              DP [i]は[I + 1 ] = 1 45              のRES =2 ;
46          }
 47      }
 48      のためのint型 L = 3、L <= str.length(); L ++ ){
 49          のためのint型 iは= 0 ; iがL + - 1 <str.length(); iは++を){
 50              のint J = iがL + - 1 51              であれば(STR [I] == STR [J] && DP [I + 1 ] [j - 1 ] == 1 ){
 52                  、DP [I] [J] = 1 53の                  RES = L。
54             }
 55          }
 56      }
 57  }
 58  
59  のint main()の
 60  {
 61      のgetline(CIN、STR)。
62      WAY1();
63      coutの<< RES << てendl;
64      リターン 0 ;
65 }

 

おすすめ

転載: www.cnblogs.com/zzw1024/p/11257301.html