本文共 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
;
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/