d187 - 11530 - SMS Typing
題目描述
題目要求計算輸入字串在特定手機鍵盤上輸入所需的按鍵次數。手機鍵盤的字母排列方式如題目所述,每個按鍵對應多個字母,輸入字母的次數取決於該字母在按鍵上的位置。空白鍵只需按一次。
解題思路
這題的解題思路是模擬手機鍵盤的輸入過程。對於輸入字串中的每個字元,根據其所屬的按鍵,計算需要按鍵的次數。空格按一次,'a'、'd'、'g'等按一次,'b'、'e'、'h'等按兩次,'c'、'f'、'i'等按三次,其他字母按四次。將所有字元的按鍵次數加總,即可得到總的按鍵次數。
複雜度分析
- 時間複雜度: O(n),其中 n 是輸入字串的長度。因為需要遍歷字串中的每個字元。
- 空間複雜度: O(1),因為只使用了常數級別的額外空間。
程式碼
#include <iostream>
#include <string>
using namespace std;
int main(){
string a;
int b;
cin >> b;
getline(cin,a);
for(int k=1;k<=b;k++){
getline(cin,a);
int count=0;
for(int i=0;i<a.length();i++){
if(a[i]=='a'||a[i]=='d'||a[i]=='g'||a[i]=='j'||a[i]=='m'||a[i]=='p'||a[i]=='t'||a[i]=='w'||a[i]==' ')
count++;
else if(a[i]=='b'||a[i]=='e'||a[i]=='h'||a[i]=='k'||a[i]=='n'||a[i]=='q'||a[i]=='u'||a[i]=='x')
count+=2;
else if(a[i]=='c'||a[i]=='f'||a[i]=='i'||a[i]=='l'||a[i]=='o'||a[i]=='r'||a[i]=='v'||a[i]=='y')
count+=3;
else
count+=4;
}
cout <<"Case #" << k << ": "<< count << "\n";
}
}