唯一の小文字の英文字を含む文字列を考えると、あなたはそれに最大2つの文字を削除した後、どのように多くの異なる文字列を得ることができますか?
入力仕様:
各入力ファイルの長さは文字列与えるつのテストケースが含ま [します。
出力仕様:
ラインでは、ほとんどの2つの文字で削除した後得ることができます異なる文字列の数を出力します。
サンプル入力:
ababcc
サンプル出力:
15
ヒント:
0の文字を削除して取得します ababcc
。
1つの文字を削除すると取得 babcc
、 aabcc
、 abbcc
、 abacc
と ababc
。
2文字を削除すると、取得 abcc
、 bbcc
、 bacc
、 babc
、 aacc
、 aabc
、 abbc
、 abac
と abab
。
1の#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 INT メイン() 4 { 5つの IOS :: sync_with_stdio(偽)。 6 // freopenは( "data.txtを"、 "R"、STDIN)。 7 文字列SS。 8 cinを>> SS。 9 長い 長い和、K = ss.size()。 10 長い 長い T = 1つの + K + K *(K- 1)/ 2、CON = 1、SCON = 0、SPART = 0 。 11 以下のための(長い 長 iは= 1、I ++; I <K ) 12 { 13 であれば(SS [I] == SS [I- 1 ]) 14 { 15 CON ++ 。 16 t-- ; 17 } 18 他の 19 { 20 であれば(CON> 1 ) 21 { 22 であれば(SPART) 23 、T = T-SCON * CON + SPART。 24 25 、T = T-CON *(コン1)/ 2 + 1 。 26 SCON = SCON + CON。 27 SPART ++ ; 28 } 29 CON = 1 。 30 もし(I> 1つの && SS [I] == SS [I- 2 ]) 31 t-- 。 32 } 33 } 34 であれば(CON> 1 ) 35 { 36 であれば(SPART) 37 、T = T-SCON * CON + SPART。 38 T = T-CON *(コン1)/ 2 + 1 。 39 SCON = SCON + CON。 40 SPART ++ ; 41 } 42 であれば(SPART) 43 T = T-(K-SCON)*(scon- SPART)。 44 45 COUT << T。 46 リターン 0 ; 47 }