給定乙個由大寫字母』a』、』b』、』c』構成的字串s,按如下進行消除過程:
1、字串s中連續相同字母組成的子串,如果子串的長度大於1,那麼這些子串會被同時消除,餘下的字元拼成新的字串。
例如:」abccbcccaa」中」cc」,」ccc」和」aa」會被同時消除,餘下」ab」和」b」拼成新的字串」abb」。
2、反覆進行上述消除,直到新的字串中相鄰字元都不相同為止。
例如:」abccbcccaa」經過一輪消除得到」abb」,再經過一輪消除得到」a」。
假設在對字串s消除開始前,允許在s中任意位置(第乙個字元之前、最後乙個字元之後以及相鄰兩個字元之間)插入任意乙個字元(『a』,』b』或者』c』),得到字串t,然後對字串t經過一系列消除。
請問該如何插入字元,使得字串t中被消除掉的字元總數(包括插入的字元)最多?
第 1 行:整數 t
(1≤t≤10
) 為問題數。
第 2 ~ t+1
行:每個問題佔一行,每行輸入乙個由』a』、』b』、』c』組成的字串s,長度不超過100。
對每個測試資料,首先輸出一行問題的編號(0
開始編號,格式:case #0:
等)。在接下來一行中輸出被消除掉的最大字元數。
input
3abcbcccaa
aaaabc
output
case #0:9case #1:
4case #2:
2
第一組資料:在」abcbcccaa」的第2個字元後插入』c』得到」abccbcccaa」,消除後得到」a」,總共消除9個字元(包括插入的』c』)。
1 #include 2 #include3using
namespace
std;
4string x[3] = ;
5void del(int& ans,string
tmp)622
else it++;
23if(flag==0) break;24
}25 ans=ans>(len-tmp.size())?ans:len-tmp.size();26}
27int
main()
2841
}42 printf("
case #%d:\n%d\n
",m,ans);
4344}45
return0;
46 }
在字串的每個空格(包括首尾)處插入a或b或c,消除連續相同字母組成的字串,判斷無可消除字串後退出,經過幾次比較,得出消除最多的字元個數。
注意是同時消除,因此應該在消除之後從消除的地方繼續向後找字串,而不是從頭開始找。
如abccbcccaa,第一次消除cc,ccc,aa,而不是第一次消除得abbcccaa,然後繼續消除bb,ccc,aaa,這樣結果就是全部消除了,這也是我一開始wa的原因。
EOJ 1805 字串匹配 字尾陣列
給你 2 個字串 可能包括數字以及標點 長度不超過 50124,請你求出最長的連續的公共子串行。不知道是不是資料改了,導致這個似乎是n 2的演算法也能暴力過去 include using namespace std int main maxl max maxl,len printf d n maxl...
hihocoder 1039 字串消除 模擬
題意 給定乙個只由組成的字串s,長度為n,故包含n 1個空隙 現要求在某個空隙插入乙個來自的字元,然後按照以下 消除規則 對插入後的字串進行消除操作,問最多能消掉幾個字元 包含插入的乙個 消除規則 1.自左至右掃瞄當前字串,若字元v從某個位置開始連續出現了2次及以上,則此區間內的v全部消除 2.重複...
1039 字元消除
字元消除,正好簡單複習一下,c 中的容器。容器使用起來還是比較方便的,包括string型別,還是要經常寫寫,才知道自己那些地方有問題。include stdafx.h include include include using namespace std string stringremove st...