1.特定のトピック
文字回文配列で最長のを見つけるために、構成された大文字と小文字の文字列下記のものを含む、与えられました。建設プロセスでは、大文字と小文字を区別しますのでご注意ください。以下のような「Aaが」回文文字列として使用することはできません。
注:文字列の長さを超える1010ではないと仮定。
例1:入力: "abccccdd"出力: 7
説明:私たちは最も長い文字列を作成することができますが回文「dccaccd」、その長さは7です。
アイデアの2.分析
中間パリンドローム配列は対称軸であり、それは中心元素を有することが望ましい、残りの要素の偶数です。
文字の各列の統計数が最初に考え、決定パリティ後、中心元素限り、残りの偶数要素を保持していました。しかし、実際には、奇数の要素のために、それは結果を追加し、でも要素マイナス1になることができます。
3.コード
1 公共 INT longestPalindrome(文字列S){ 2 INT [] = L 新しい新しい INT [26である]; //小文字のそれぞれの数を記録する 。3 INT [] B = 新しい新しい INT [26である]; //主要書き込まれた文字の数を記録 4 用(INT ; I <s.length(); I = 0 I ++ ){ 5。 INTのdiff = s.charAt(I) - 'A' ; 6 IF(差分<26である){ 7 。B [差分] + = 1 ; 8 } 他{ 9。 デフ= s.charAt(I) - 'A' ; 10 。L [差分] + = 1 ; 11 } 12である } 13が INT結果= 0 ; 14 のために(INT NUM:L){ 15 結果= NUM + / 2 * 2 ; //すべての偶数要素と奇数要素ターンを保ちます偶数 16 IF ++(NUM = 2%0%2 == 0 &&結果!)結果中心元素予約//; 17。 } 18である ため(INT NUM:B){ 19 の検索結果= NUM + / 2 * 2 。 20 IF(NUM = 2%0%2 == 0 &&結果!)結果++ ; 21のIS } 22 リターン結果。 23 }