最少按键次数

题目描述

给你一个字符串 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;
}
相关推荐
MC皮蛋侠客1 小时前
Google Test 单元测试指南
c++·单元测试·google test
艾莉丝努力练剑2 小时前
【Linux:文件】Ext系列文件系统进阶
linux·运维·服务器·c++·文件系统·文件io·ext
kkeeper~2 小时前
0基础C语言积跬步之数据在内存中的存储
c语言·数据结构·算法
2401_868534783 小时前
论企业网络设计
数据结构
wabs6664 小时前
关于贪心算法的一些自我总结【力扣45.跳跃游戏II】【灵感来源:代码随想录】
算法·贪心算法·复盘
2401_876964134 小时前
【湖北专升本】2026湖北专升本真题PDF+备考资料汇总
数据结构·人工智能·经验分享·深度学习·算法·计算机视觉
basketball6164 小时前
C++ NULL 和 nullptr 区别 以及 nullptr 的核心实现
java·开发语言·c++
嗝o゚4 小时前
CANN GE 算子融合——融合算法与调度策略
算法·昇腾·cann·ge
小江的记录本5 小时前
【JVM虚拟机】垃圾回收GC:垃圾回收算法:标记-清除、标记-复制、标记-整理、分代收集(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·算法·安全·面试
Fre丸子_5 小时前
自定义文件夹选取功能
c++