題目描述:
給你乙個字串 s 和兩個整數 x 和 y 。你可以執行下面兩種操作任意次。
刪除子字串 「ab」 並得到 x 分。
比方說,從 「cabxbae」 刪除 ab ,得到 「cxbae」 。
刪除子字串"ba" 並得到 y 分。
比方說,從 「cabxbae」 刪除 ba ,得到 「cabxe」 。
請返回對 s 字串執行上面操作若干次能得到的最大得分。
示例 1:
輸入:s = 「cdbcbbaaabab」, x = 4, y = 5
輸出:19
解釋:
示例 2:
輸入:s = 「aabbaaxybbaabb」, x = 5, y = 4
輸出:20
1 <= s.length <= 105
1 <= x, y <= 104
s 只包含小寫英文本母。
方法1:
(1)使用單調棧實現貪心;
(2)貪心的策略是每次盡量的先將權重大的子字串刪除,若刪除完了,再從剩餘的字元中刪除乙個權重較小的子字串,
(3)然後判斷是否能夠刪除可能存在的權重較大的子字串,若能,則接著刪除,若不能,則接著再去找乙個權重較小的字串;
(4)直到判斷完所有的字元;
class
solution
else
} stack<
char
> st_tmp;
//輔助棧, 儲存字元
while
(!st.
empty()
)}else
}return;}
intmaximumgain
(string s,
int x,
int y)
else
return res;}}
;
1695 刪除子陣列的最大得分
題目描述 給你乙個正整數陣列 nums 請你從中刪除乙個含有 若干不同元素 的子陣列。刪除子陣列的 得分 就是子陣列各元素之 和 返回 只刪除乙個 子陣列可獲得的 最大得分 如果陣列 b 是陣列 a 的乙個連續子串行,即如果它等於 a l a l 1 a r 那麼它就是 a 的乙個子陣列。示例 1 ...
1422 分割字串的最大得分
題目描述 給你乙個由若干 0 和 1 組成的字串 s 請你計算並返回將該字串分割成兩個 非空 子字串 即 左 子字串和 右 子字串 所能獲得的最大得分。分割字串的得分 為 左 子字串中 0 的數量加上 右 子字串中 1 的數量。示例 1 輸入 s 011101 輸出 5 解釋 將字串 s 劃分為兩個...
字串 簡單 1422 分割字串的最大得分
題目 給你乙個由若干 0 和 1 組成的字串 s 請你計算並返回將該字串分割成兩個 非空 子字串 即 左 子字串和 右 子字串 所能獲得的最大得分。分割字串的得分 為 左 子字串中 0 的數量加上 右 子字串中 1 的數量。示例 1 輸入 s 011101 輸出 5 解釋 將字串 s 劃分為兩個非空...