题目链接:3784. 使所有字符相等的最小删除代价(中等)
算法原理:
解法:贪心
3ms击败100.00%
时间复杂度O(N)
正难则反,问题转化:保留总代价最大的字母,其余全删
方法:用数组模拟哈希表找到每个字母的总代价
Java代码:
class Solution { public long minCost(String ss, int[] cost) { //问题转换:保留总代价最大的字母,其余全删 int n=cost.length; //存<字母,总代价>避免贪心出错 long[] total=new long[26]; char[] s=ss.toCharArray(); long sum=0;//记录总和 long max=0;//记录最大值 for(int i=0;i<n;i++){ sum+=cost[i]; total[s[i]-'a']+=cost[i]; } for(int i=0;i<26;i++) max=Math.max(max,total[i]); return sum-max; } }