字串消除 英雄會

2021-08-27 16:32:35 字數 1176 閱讀 2073

給定乙個字串,僅由a,b,c 3種小寫字母組成。

當出現連續兩個不同的字母時,你可以用另外乙個字母替換它,如 有ab或ba連續出現,你把它們替換為字母c; 有ac或ca連續出現時,你可以把它們替換為字母b; 有bc或cb 連續出現時,你可以把它們替換為字母a。

你可以不斷反覆按照這個規則進行替換,你的目標是使得最終結果所得到的字串盡可能短,求最終結果的最短長度。 輸入:字串。長度不超過200,僅由abc三種小寫字母組成。

輸出: 按照上述規則不斷消除替換,所得到的字串最短的長度。

例如:輸入cab,輸出2。因為我們可以把它變為bb或者變為cc。

輸入bcab,輸出1。儘管我們可以把它變為aab -> ac -> b,也可以把它變為bbb,但因為前者長度更短,所以輸出1。

今天發現乙個非常好的數學方法求解...【詳情自:字串消除問題的數學證明

】作者的思想不錯,大家也可以看一下...

總之結論就是:

1.純字串的最優串就是自身,最優長度就是自身的長度

2.統計為(奇,奇,奇)或(偶,偶,偶)的字串的最優長度為2

3.其餘的字串的最優長度是1

簡單實現貼上:

/********************

* 2014-1-3

* ********************/

#include#includeusing namespace std;

//1、純字串的最優串就是自身,最優長度就是自身的長度

//2、統計為(奇,奇,奇)或(偶,偶,偶)的字串的最優長度為2

//3、其餘的字串的最優長度是1

int minlength(const char *s)

if(a == length || b == length || c == length)

else //a, b, c對應奇偶

else

}}int main()

{ cout<

將這一題轉為數學問題有點抄近路的感覺,不過咱們就是與數學的結合體...

歡迎提點...o(∩_∩)o

字串消除

給定乙個字串,僅由a,b,c 3種小寫字母組成。當出現連續兩個不同的字母時,你可以用另外乙個字母替換它,如 有ab或ba連續出現,你把它們替換為字母c 有ac或ca連續出現時,你可以把它們替換為字母b 有bc或cb 連續出現時,你可以把它們替換為字母a。你可以不斷反覆按照這個規則進行替換,你的目標是...

字串消除

題目詳情 給定乙個字串,僅由a,b,c 3種小寫字母組成。當出現連續兩個不同的字母時,你可以用另外乙個字母替換它,如 有ab或ba連續出現,你把它們替換為字母c 有ac或ca連續出現時,你可以把它們替換為字母b 有bc或cb 連續出現時,你可以把它們替換為字母a。你可以不斷反覆按照這個規則進行替換,...

字串消除

小hi最近在玩乙個字元消除遊戲。給定乙個只包含大寫字母 abc 的字串s,消除過程是如下進行的 1 如果s包含長度超過1的由相同字母組成的子串,那麼這些子串會被同時消除,餘下的子串拼成新的字串。例如 abccbcccaa 中 cc ccc 和 aa 會被同時消除,餘下 ab 和 b 拼成新的字串 a...