字符串价值

有一种有趣的字符串价值计算方式:统计字符串中每种字符出现的次数,然后求所有字符次数的平方和作为字符串的价值。

例如: 字符串"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),即允许移除的字符个数。

输出描述

输出一个整数,表示得到的最小价值。

输入

aba
1

输出

2


思路
  • 依次遍历字符串(aabbba)中的每一个数值,obj{ a: 3, b: 3 })对象的键字符,值是字符出现的次数。
  • 创建一个数组arr, 保存的是字符串中所有的字符出现的次数[3, 3]
  • 对数字进行升序排序,对 k(2) 进行k-- 操作,每一个将数组中最大的值(arr[arr.length - 1])减值操作,数组重新排序,每一次都对数组中最大的数减值,直至 k = 0 即可。
function output(str, k) {
    let obj = {}, arr = [], result = 0
    for (let i = 0; i < str.length; i++) {
      if (obj[str[i]]) {
        obj[str[i]]++
      } else {
        obj[str[i]] = 1
      }
    }
    for (key in obj) {
      arr.push(obj[key])
    }
    arr.sort(function (a, b) {
      return a - b
    })

    for (let i = 0; i < k; i++) {
      arr[arr.length - 1]--
      arr.sort(function (a, b) {
        return a - b
      })
    }
    arr.forEach(function (val) {
      result += val * val
    })
    return result
  }

  console.log(output('aaabbb', 2))

你可能感兴趣的:(字符串价值)