题目描述
给你一个字符串 s,由小写英文字母组成。
电话键盘上的按键与 不同 小写英文字母集合相映射,可以通过按压按键来组成单词。例如,按键 2 对应 ["a","b","c"],我们需要按一次键来输入 "a",按两次键来输入 "b",按三次键来输入 "c"。
现在允许你将编号为 2 到 9 的按键重新映射到 不同 字母集合。每个按键可以映射到 任意数量 的字母,但每个字母 必须 恰好 映射到 一个 按键上。你需要找到输入字符串 s 所需的 最少 按键次数。
返回重新映射按键后输入 s 所需的 最少 按键次数。
下面给出了一种电话键盘上字母到按键的映射作为示例。注意 1,*,# 和 0 不 对应任何字母。
输入格式
一行只包含小写字母的字符串。
输出格式
一行一个整数,表示最少按键次数。
样例
样例输入1
abcde
样例输出1
5
样例输入2
aabbccddeeffgghhiiiiii
样例输出2
24
代码
#include<bits/stdc++.h>
using namespace std;
int a[27]={0};
int main(){
char c;
while(cin>>c){
a[(int)(c-'a')+1]++;
}
sort(a+1, a+ 26+1, greater<int>());
int sum=0;
sum+=a[1]*1;
sum+=a[2]*1;
sum+=a[3]*1;
sum+=a[4]*1;
sum+=a[5]*1;
sum+=a[6]*1;
sum+=a[7]*1;
sum+=a[8]*1;
sum+=a[9]*2;
sum+=a[10]*2;
sum+=a[11]*2;
sum+=a[12]*2;
sum+=a[13]*2;
sum+=a[14]*2;
sum+=a[15]*2;
sum+=a[16]*2;
sum+=a[17]*3;
sum+=a[18]*3;
sum+=a[19]*3;
sum+=a[20]*3;
sum+=a[21]*3;
sum+=a[22]*3;
sum+=a[23]*3;
sum+=a[24]*3;
sum+=a[25]*4;
sum+=a[26]*4;
cout<<sum;
return 0;
}