来源:牛客网
- 热度指数:4875时间限制:1秒空间限制:65536K
- 算法知识视频讲解
输入描述:
一个长度不大于100的字符串,其中只有手机按键上有的小写字母
输出描述:
输入可能包括多组数据,对于每组数据,输出按出Input所给字符串所需要的时间
输入
bob www
输出
7 7
这题我的想法很简单,不需要把26个字母都放到数组中,只需要存每个键盘的第一个字母,每次循环时候只要计算距离第一个字母的差,当差值<=2时就可以直接加上。当然,需要考虑两个特殊的键盘,因为那两个键盘是四个字母,所以差值是<=3。
#include <vector>
#include <string>
#include <iostream>
using namespace std;
int main()
{
char key_board[] = {'a', 'd', 'g', 'j', 'm', 'p', 't', 'w'};
string input;
int sz = sizeof(key_board) / sizeof(char);
while (cin >> input) {
int prev = -1, cnt = 0;
for (int i = 0; i < input.size(); ++i) {
for (int j = 0; j < sz; ++j) {
int gap = input[i] - key_board[j];
if (gap >= 0 && gap <= 2 || (j == sz - 1 || j == sz - 3 && gap <= 3)) {
if (j == prev) {
cnt += 2;
}
cnt += (gap + 1);
prev = j;
break;
}
}
}
cout << cnt;
}
return 0;
}
1249



被折叠的 条评论
为什么被折叠?



