首页 > 试题广场 >

名字的漂亮度

[编程题]名字的漂亮度
  • 热度指数:142718 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

给出一个字符串,该字符串仅由小写字母组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。
每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个不同字母拥有相同的“漂亮度”。字母忽略大小写。

给出多个字符串,计算每个字符串最大可能的“漂亮度”。

本题含有多组数据。

数据范围:输入的名字长度满足



输入描述:

第一行一个整数N,接下来N行每行一个字符串



输出描述:

每个字符串可能的最大漂亮程度

示例1

输入

2
zhangsan
lisi

输出

192
101

说明

对于样例lisi,让i的漂亮度为26,l的漂亮度为25,s的漂亮度为24,lisi的漂亮度为25+26+24+26=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)
	}

}

发表于 2022-06-08 16:51:22 回复(0)
从字符串按频率排序,时间复杂度O(n^2),可以用堆排序优化
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
}


发表于 2022-05-17 17:41:19 回复(0)
package main

import (
    "bufio"
    "os"
    "fmt"
    "sort"
)

func main(){

    var param int
    var params []string
    
    fmt.Scan(&param)
    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)
}

发表于 2021-10-21 20:17:17 回复(0)

问题信息

难度:
3条回答 37505浏览

热门推荐

通过挑战的用户

查看代码