c054 - 10082 - WERTYU
題目描述
題目要求將輸入字串中的每個字元替換為鍵盤上其左側的字元。鍵盤佈局如題目所述,QWERTYUIOP、ASDFGHJKL、ZXCVBNM 分別為三行,1234567890-= 為第一行。空白字元保持不變。
解題思路
程式碼使用多個字串來表示鍵盤的每一行。對於輸入字串中的每個字元,程式碼遍歷鍵盤的每一行,檢查該字元是否在該行中。如果在某一行中找到該字元,則將其替換為該行中左側的字元。對於特殊情況,例如 'q' 替換為 ']','a' 替換為 ''','z' 替換為 '/',程式碼也進行了處理。
複雜度分析
- 時間複雜度: O(N * M),其中 N 是輸入字串的長度,M 是鍵盤行數(固定為 4)。
- 空間複雜度: O(1),程式碼使用的額外空間是固定的,不隨輸入大小變化。
程式碼
#include <iostream>
#include <string>
using namespace std;
int main(){
string a={"`1234567890-="};
string b={"QWERTYUIOP[]\\"};
string c={"ASDFGHJKL;'"};
string d={"ZXCVBNM,./"};
string e;
while(getline(cin,e)){
for(int i=0;i<e.length();i++){
for(int j=0;j<a.length();j++){
if(e[i]=='`')
e[i]='`';
else if(e[i]==a[j])
e[i]=a[j-1];
}
for(int j=0;j<b.length();j++){
if(e[i]=='q')
e[i]=']';
else if(e[i]==b[j])
e[i]=b[j-1];
}
for(int j=0;j<c.length();j++){
if(e[i]=='a')
e[i]='\'';
else if(e[i]==c[j])
e[i]=c[j-1];
}
for(int j=0;j<d.length();j++){
if(e[i]=='z')
e[i]='/';
else if(e[i]==d[j])
e[i]=d[j-1];
}
}
cout << e << "\n";
}
}