UVa 10082

UVa 10082

題目

http://domen111.github.io/UVa-Easy-Viewer/?10082

人在打字常常打錯,現在給你一項任務,將所有輸入的字元都變成在鍵盤中左邊一位的字元

當然,題目保證不會輸入像是 Q A Z ` 的邊界字元,請放心

想法

直接將鍵盤上的字刷過一遍,沒錯,刷過去

建立一個字串 $tbl$ ,包含鍵盤上的所有字母,並且是由上到下、由左到右的順序

接下來每次我們輸入的時候,只需要到 $tbl$ 找到當前的字母,然後輸出他的前一個就可以了

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream> 
using namespace std;
string tbl="`1234567890-=QWERTYUIOP[]ASDFGHJKL;'ZXCVBNM,./'";
string s;
int main(){
while(getline(cin,s)){
for(int i=0 ; i<s.size() ; i++){
if(s[i]==' ')
cout<<" ";
else{
for(int j=0 ; j<tbl.size() ; j++){
if(s[i]==tbl[j]){
cout<<tbl[j-1];
break;
}
}
}
}
cout<<"\n";
}
return 0;
}

時間複雜度分析

假設 $tbl$ 的字串長度為 $N$

每次查詢時間複雜度最差為 $O(N)$

每筆測資時間複雜度為 $O(len(s)N)$