# String Manipulation# Greedy# Simulation

d187 - 11530 - SMS Typing

🔗 前往 ZeroJudge 原題

題目描述

題目要求計算輸入字串在特定手機鍵盤上輸入所需的按鍵次數。手機鍵盤的字母排列方式如題目所述,每個按鍵對應多個字母,輸入字母的次數取決於該字母在按鍵上的位置。空白鍵只需按一次。

解題思路

這題的解題思路是模擬手機鍵盤的輸入過程。對於輸入字串中的每個字元,根據其所屬的按鍵,計算需要按鍵的次數。空格按一次,'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";
	} 
}

Discussion