1717 删除子字符串的最大得分

阅读: 评论:0

1717  删除子字符串的最大得分

1717 删除子字符串的最大得分

题目描述:
给你一个字符串 s 和两个整数 x 和 y 。你可以执行下面两种操作任意次。
删除子字符串 “ab” 并得到 x 分。
比方说,从 “cabxbae” 删除 ab ,得到 “cxbae” 。
删除子字符串"ba" 并得到 y 分。
比方说,从 “cabxbae” 删除 ba ,得到 “cabxe” 。
请返回对 s 字符串执行上面操作若干次能得到的最大得分。

示例 1:
输入:s = “cdbcbbaaabab”, x = 4, y = 5
输出:19
解释:

  • 删除 “cdbcbbaaabab” 中加粗的 “ba” ,得到 s = “cdbcbbaaab” ,加 5 分。
  • 删除 “cdbcbbaaab” 中加粗的 “ab” ,得到 s = “cdbcbbaa” ,加 4 分。
  • 删除 “cdbcbbaa” 中加粗的 “ba” ,得到 s = “cdbcba” ,加 5 分。
  • 删除 “cdbcba” 中加粗的 “ba” ,得到 s = “cdbc” ,加 5 分。
    总得分为 5 + 4 + 5 + 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 {
public://获得删除两个两个子字符串的数量void get_count(string& s, char first_ch, char second_ch, int& count_ch_first, int& count_ch_second) {stack<char> st;//先将原字符串使用栈进行存储,存储过程中删除所有的权重较大的子字符串for (char ch : s) {if (!st.empty() && ch == second_ch && st.top() == first_ch) {//删除子字符串st.pop();++count_ch_first;//统计删除子字符串的数量}else {st.push(ch);//压入字符}}stack<char> st_tmp;//辅助栈, 存储字符while (!st.empty()) {//判断完所有的字符if (!st.empty() && !pty() && st.top() == second_ch && p() == first_ch) {//说明可以删除一个权重较小的子字符串++count_ch_second;//统计权重较小的子字符串的数量//删除子字符串st.pop();st_tmp.pop();//判断是否可能进一步删除权重较大的字符串while (!st.empty() &&!pty() && st.top() == first_ch && p() == second_ch) {++count_ch_first;//统计删除权重较大的子字符串的数量//删除子字符串st.pop();st_tmp.pop();}}else {//压入到辅助栈中st_tmp.p());st.pop();}}return;}int maximumGain(string s, int x, int y) {int first = 0, second = 0;int res = 0;//根据权重的大小,决定先删除那个子字符串if (x > y) {get_count(s, 'a', 'b', first, second);res = x * first + y * second;}else {get_count(s, 'b', 'a', first, second);res = y * first + x * second;}return res;}
};

本文发布于:2024-01-30 05:32:49,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170656397119574.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:字符串   得分
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23