题解 | 手机键盘
手机键盘
https://www.nowcoder.com/practice/20082c12f1ec43b29cd27c805cd476cd
#include<map>
#include<cstdio>
#include<cstring>
using namespace std;
map<char, int> pos = { {'a', 1}, {'b', 1}, {'c', 1}, {'d', 2}, {'e', 2}, {'f', 2}, {'g', 3}, {'h', 3}, {'i', 3}, {'j', 4}, {'k', 4}, {'l', 4}, {'m', 5},
{'n', 5}, {'o', 5}, {'p', 6}, {'q', 6}, {'r', 6}, {'s', 6}, {'t', 7}, {'u', 7}, {'v', 7}, {'w', 8}, {'x', 8}, {'y', 8}, {'z', 8}
};
map<char, int> ti = {
{'a', 1}, {'b', 2}, {'c', 3}, {'d', 1}, {'e', 2}, {'f', 3}, {'g', 1}, {'h', 2}, {'i', 3}, {'j', 1}, {'k', 2}, {'l', 3}, {'m', 1},
{'n', 2}, {'o', 3}, {'p', 1}, {'q', 2}, {'r', 3}, {'s', 4}, {'t', 1}, {'u', 2}, {'v', 3}, {'w', 1}, {'x', 2}, {'y', 3}, {'z', 4}
};
bool isSamePos(char f, char s) { //两个字符是否在同一个按键上
int pos1 = pos.find(f)->second;
int pos2 = pos.find(s)->second;
return pos1 == pos2;
}
int ky5(char s[], int size) {
int time = 0;
for (int i = 0; i < size; i++) {
//判断相邻的两个字符是否在同一个按键
if (i != size - 1 && isSamePos(s[i], s[i + 1])) {
//是的话,时间+2
time += 2;
}
time += ti.find(s[i])->second;
}
return time;
}
int main() {
char s[105] = { 0 };
while (scanf("%s", s) != EOF) {
printf("%d\n", ky5(s, strlen(s)));
}
}