博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
5509. 避免重复字母的最小删除成本
阅读量:4262 次
发布时间:2019-05-26

本文共 1183 字,大约阅读时间需要 3 分钟。

题目描述:

给你一个字符串 s 和一个整数数组 cost ,其中 cost[i] 是从 s 中删除字符 i 的代价。

返回使字符串任意相邻两个字母不相同的最小删除成本。

请注意,删除一个字符后,删除其他字符的成本不会改变。

示例 1:

输入:s = "abaac", cost = [1,2,3,4,5]输出:3解释:删除字母 "a" 的成本为 3,然后得到 "abac"(字符串中相邻两个字母不相同)。

示例 2:

输入:s = "abc", cost = [1,2,3]输出:0解释:无需删除任何字母,因为字符串中不存在相邻两个字母相同的情况。

示例 3:

输入:s = "aabaa", cost = [1,2,3,4,1]输出:2解释:删除第一个和最后一个字母,得到字符串 ("aba") 。

提示:

s.length == cost.length

1 <= s.length, cost.length <= 10^5
1 <= cost[i] <= 10^4
s 中只含有小写英文字母

解题思路:

如果采用当遇到相同的字符删除除代价最大的字符以及字符的代价,时间复杂度耗时较长;

1)、采用的是tmp保留的每个字符的最大的价值cost

2)、ret记录的是删除字符的总代价;
3)、ret - tmp即为所求的结果 ;

代码实现:

class Solution {
public: int minCost(string s, vector
& cost) {
int i , ret= 0 , tmp = cost.back() ; for (i = 0 ; i < cost.size() ; i ++) ret += cost[i] ; char cur = s.back(); //tmp就是保留的代价 for (i = s.length() - 2; i > -1 ; i --) {
while (i > -1 &&cur == s[i]){
tmp = max(cost[i] , tmp) ; i -- ; } if (i > -1) {
ret -= tmp ; cur = s[i] ; tmp = cost[i] ; } } ret -= tmp ; return ret ; }};

转载地址:http://oraei.baihongyu.com/

你可能感兴趣的文章
生产库快速关闭数据库
查看>>
差异增量备份和累积增量备份的差别
查看>>
ASM 无法发现候选磁盘组----grid 11.2.0.3 asm 自检通不过 prvf-5184
查看>>
ASM 无法发现候选磁盘组----丢失的ASM磁盘组 ASM的磁盘组无法挂载
查看>>
Oracle 10g配置单向stream流复制,完整记录
查看>>
ORA-00845 MEMORY_TARGET not supported on this system
查看>>
ORA-00257: archiver error --11GR2 RAC 设置归档路径和开启flashback
查看>>
奕新集团项目--Oracle 源RAC ---目标 RAC GG 搭建 11.2.3 版本 双向同步
查看>>
What is SCAN in Oracle 11g R2 RAC
查看>>
关于Recycle Bin是什么以及实验
查看>>
Linux搭建时间同步服务器
查看>>
ORA-12541: TNS:no listener
查看>>
mysql数据库存储路径更改 数据文件位置
查看>>
Could not fetch specs from https://rubygems.org/
查看>>
oracle日志分析工具LogMiner使用
查看>>
使用 PDI 和 Oracle CDC 来实现Oracle 数据库向其他数据库的数据同步
查看>>
oracle数据库是否归档和修改归档模式
查看>>
Oracle内存参数调优技术详解
查看>>
浅谈增值业务及双向运营支撑平台
查看>>
JMS开发指南
查看>>