題目連結:
題目意譯:
你被給定三個整數 x 、 y 和 z。
你有 x 個等於 "AA" 字串、y 個等於 "BB" 的字串以及 z 個等於 "AB" 的字串。你想要選擇若干個(可以全選或是一個都不選)這些字串並按照某個順序將這些字串串接在一起來形成一個新字串。而這個新字串不得包含 "AAA" 或是 "BBB" 作為其子字串。
回傳新字串的最大可能長度。
一個子字串為一個字串中的一個非空連續字元序列。
限制:
1 ≦ x, y, z ≦ 50
範例測資:
範例 1:
輸入: x = 2, y = 5, z = 1
輸出: 12
解釋: 我們可以以這個順序串接字串:"BB" 、 "AA" 、 "BB" 、 "AA" 、 "BB" 和 "AB"。因此我們的新字串為 "BBAABBAABBAB"。
該字串長度為 12,而我們可以證明不可能造出一個更長的字串。
範例 2:
輸入: x = 3, y = 2, z = 2
輸出: 14
解釋: 我們可以以這個順序串接字串:"AB" 、 "AB" 、 "AA" 、 "BB" 、 "AA" 、 "BB" 和 "AA"。因此我們的新字串為 "ABABAABBAABBAA"。
該字串長度為 14,而我們可以證明不可能造出一個更長的字串。
解題思維:
可以看到如果新字串是 A 開頭或是 B 結尾,則我們一定可以使用掉全部 z 個 "AB" 字串。
那接下來的問題就是要怎麼盡量用掉 "AA" 和 "BB"。而我們可以看到只由 "AA" 和 "BB" 組成的新字串只能是 "AABBAABB……" 或是 "BBAABBAA……"。
因此如果 x == y,則 "AA" 和 "BB" 可以全數用完;
如果 x > y,則可以組成 "AABBAABB……",其中 "AA" 有 y + 1 個、"BB" 有 y 個。
最後如果 x < y,則可以組成 "BBAABBAA……",其中 "AA" 有 x 個、"BB" 有 x + 1 個。
因此最後把上面各種字串用的數量加總乘以 2 即為所求最長新字串之長度。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。