基本思想:
提前打表,直接算;
关键点:
无;
#include<iostream> #include<vector> #include<algorithm> #include<string> #include<cmath> #include<set> #include<map> using namespace std; vector<string>keys = { "abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" }; map<char, int>mp; void init() { for (int i = 0; i < keys.size(); i++) { for (int j = 0; j < keys[i].size(); j++) { mp.insert(make_pair(keys[i][j], i)); } } } int charge(char c) { int index = mp[c]; return c - keys[index][0] + 1; } int main() { string s; init(); while (cin >> s) { if (s == "") { cout << 0 << endl; continue; } int cnt = 0; cnt += charge(s[0]); for (int i = 1; i < s.size(); i++) { //计算后续的按键; if (mp[s[i]] == mp[s[i - 1]]) { //如果在相同按键上; cnt += 2; } cnt += charge(s[i]); } cout << cnt << endl; } return 0; }