一、题目
题目描述
有一种有趣的字符串价值计算方式:统计字符串中每种字符出现的次数,然后求所有字符次数的平方和作为字符串的价值
例如: 字符串"abacaba",里面包括4个'a',2个'b',1个'c',于是这个字符串的价值为4 * 4 + 2 * 2 + 1 * 1 = 21
牛牛有一个字符串s,并且允许你从s中移除最多k个字符,你的目标是让得到的字符串的价值最小。输入描述:
输入包括两行,第一行一个字符串s,字符串s的长度length(1 ≤ length ≤ 50),其中只包含小写字母('a'-'z')。 第二行包含一个整数k(0 ≤ k ≤ length),即允许移除的字符个数。输出描述:
输出一个整数,表示得到的最小价值示例1
输入
aba 1输出
2
二、分析及代码
题意:给一个字符串,他的价值等于每个字母出现的次数的平方和。现可以删除k个字母,让你求出删除k个后的最小价值是多少。
分析:首先统计出每个字符出现的次数,放在一个列表中,倒序排序。循环k次,每次给列表中的最大值减一 。我的代码可以将第一次双层for循环改进为一个for循环,有兴趣的朋友可以改一下。代码如下:
s = list(input()) k = int(input()) s1 = set(s) num = [] for x in s1: t = 0 for y in s: if x == y: t += 1 num.append(t) num.sort(reverse=True) while k>0: m = max(num) for i in range(len(num)): if num[i] == m: num[i] -= 1 k -= 1 break i = 0 res = 0 for i in range(len(num)): res += num[i] ** 2 print(res)