給定乙個字串,僅由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...