分類:字串處理
時間限制:1000ms單點時限:1000ms
記憶體限制:256mb
小hi最近在玩乙個字元消除遊戲。給定乙個只包含大寫字母"abc"的字串s,消除過程是如下進行的:
1)如果s包含長度超過1的由相同字母組成的子串,那麼這些子串會被同時消除,餘下的子串拼成新的字串。例如"abccbcccaa"中"cc",「ccc"和"aa"會被同時消除,餘下"ab"和"b"拼成新的字串"abb」。
2)上述消除會反覆一輪一輪進行,直到新的字串不包含相鄰的相同字元為止。例如」abccbcccaa」經過一輪消除得到"abb",再經過一輪消除得到"a"。
遊戲中的每一關小hi都會面對乙個字串s。在消除開始前小hi有機會在s中任意位置(第乙個字元之前、最後乙個字元之後以及相鄰兩個字元之間)插入任意乙個字元(『a』,『b』或者』c』),得到字串t。t經過一系列消除後,小hi的得分是消除掉的字元的總數。
請幫助小hi計算要如何插入字元,才能獲得最高得分。
輸入第一行是乙個整數t(1<=t<=100),代表測試資料的數量。
之後t行每行乙個由』a』『b』'c』組成的字串s,長度不超過100。
對於每一行輸入的字串,輸出小hi最高能得到的分數。
第一組資料:在"abcbcccaa"的第2個字元後插入』c』得到"abccbcccaa",消除後得到"a",總共消除9個字元(包括插入的』c』)。
第二組資料:「aaa"插入』a』得到"aaaa」,消除後得到"",總共消除4個字元。
第三組資料:無論是插入字元後得到"aabc","abbc"還是"abcc"都最多消除2個字元。
3abcbcccaa
aaaabc
942
列舉所有可能,嘗試每一種插入方法,尋得最優值。
注:通過c++自帶string類的insert、erase、size等函式簡化操作。
insert用法:
string str=
"123456789"
;//在str[1]處插入字串0,後面子串後移,第二個輸入引數須為字串,不接受字元輸入
str.
insert(1
,"0");
cout << str;
執行結果:
erase用法:
string str =
"123456789"
;str.
erase(5
,3);
//從str[5]開始刪除3個字元
cout << str;
執行結果:
#include
#include
#include
#include
using
namespace std;
intmain()
if(i == str.
size()
)else
//刪除重複字母
bool change =
true
;while
(change&& newstr.
size()
!=0) newstr.
erase
(k, length +1)
; k = k -1;
}}}//分數
score =
1+ str.
size()
- newstr.
size()
;if(score > bestscore)}}
cout << bestscore << endl;
}return0;
}
hihocoder 1039 字元消除
小hi最近在玩乙個字元消除遊戲。給定乙個只包含大寫字母 abc 的字串s,消除過程是如下進行的 1 如果s包含長度超過1的由相同字母組成的子串,那麼這些子串會被同時消除,餘下的子串拼成新的字串。例如 abccbcccaa 中 cc ccc 和 aa 會被同時消除,餘下 ab 和 b 拼成新的字串 a...
Hihocoder 1039 字元消除
小hi最近在玩乙個字元消除遊戲。給定乙個只包含大寫字母 abc 的字串s,消除過程是如下進行的 1 如果s包含長度超過1的由相同字母組成的子串,那麼這些子串會被同時消除,餘下的子串拼成新的字串。例如 abccbcccaa 中 cc ccc 和 aa 會被同時消除,餘下 ab 和 b 拼成新的字串 a...
hihocoder 1039 字元消除
時間限制 1000ms 單點時限 1000ms 記憶體限制 256mb 小hi最近在玩乙個字元消除遊戲。給定乙個只包含大寫字母 abc 的字串s,消除過程是如下進行的 1 如果s包含長度超過1的由相同字母組成的子串,那麼這些子串會被同時消除,餘下的子串拼成新的字串。例如 abccbcccaa 中 c...