每个测试文件均包含多组测试数据。第一行输入一个整数
代表数据组数,每组测试数据描述如下:
在一行上输入一个长度为
、仅由小写字母构成的字符串
。
对于每一组测试数据,输出一个整数,表示字符串的最大“漂亮度”。
2 zhangsan lisi
192 101
对于第一组测试数据,其中一种最优的分配方案是:
将字符
的漂亮度分配为
;
将字符
的漂亮度分配为
;
将字符
的漂亮度依次分配为
;
其余字符随意分配;
最终,得到字符串的“漂亮度”为
。
对于第二组测试数据,其中一种最优的分配方案是:
将字符
的漂亮度分配为
;
将字符
的漂亮度分配为
;
将字符
的漂亮度分配为
;
其余字符随意分配;
最终,得到字符串的“漂亮度”为
。
package main
import (
"bufio"
"fmt"
"os"
"sort"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
for scanner.Scan() {
input := scanner.Text()
if input == "" {
return
}
charMap := map[byte]int{}
for i := 0; i < len(input); i++ {
charMap[input[i]]++
}
beautyList := []int{}
for _, v := range charMap {
beautyList = append(beautyList, v)
}
sort.Ints(beautyList)
power := 26
res := 0
for i := len(beautyList) - 1; i >= 0; i-- {
res += beautyList[i] * power
power--
}
fmt.Println(res)
}
}
package main
import "fmt"
func main(){
var n int
fmt.Scanln(&n)
for i := 0; i < n; i++{
var s string
fmt.Scanln(&s)
fmt.Println(pretty(s))
}
}
func pretty(s string)int{
m := map[byte]int{}
for i := 0; i < len(s); i++{
m[s[i]] ++
}
// 从map中逐个找出最大的
ans := 0
cursor := 26
for len(m) > 0{
var maxV int
var maxB byte
for k, v := range m{
if v > maxV{
maxV = v
maxB = k
}
}
delete(m, maxB)
ans += cursor * maxV
cursor --
}
return ans
} package main
import (
"bufio"
"os"
"fmt"
"sort"
)
func main(){
var param int
var params []string
fmt.Scan(¶m)
input := bufio.NewScanner(os.Stdin)
for input.Scan() && param > 0{
params = append(params, input.Text())
param--
}
for loop:=0; loop< len(params); loop++{
BeautValu(params[loop])
}
}
func BeautValu(s string){
var str []int
var res int
var mostBeaut = 26
keyMap := make(map[string]int)
for loop := 0 ;loop< len(s); loop++{
keyMap[string(s[loop])]++
}
for _, value := range keyMap {
str = append(str, value)
}
sort.Ints(str)
for loop :=len(str) -1 ; loop >= 0 ; loop--{
res += str[loop] * mostBeaut
mostBeaut--
}
fmt.Println(res)
}