a785 - 7. It's All Greek To Me
題目描述
題目要求根據給定的希臘根字和後綴字,按照特定規則生成縮寫後的字對。規則基於根字結尾和後綴字開頭的母音,並用表格定義了縮寫的映射關係。輸入為 "根字-後綴字" 的形式,直到輸入 "END" 為止。
解題思路
程式碼首先將輸入字串分割成根字和後綴字。然後,根據根字的最後一個字母和後綴字的第一個字母,使用一系列的 if-else if 條件判斷來確定縮寫規則。根據規則,可能需要替換根字的最後一個字母,或者在根字後面添加額外的字母。最後,將縮寫後的根字和後綴字連接起來並輸出。
複雜度分析
- 時間複雜度: O(n),其中 n 是輸入字串的長度。因為程式碼需要遍歷輸入字串來分割根字和後綴字,以及遍歷後綴字來輸出結果。
- 空間複雜度: O(n),因為程式碼需要儲存根字和後綴字,以及縮寫後的字串。
程式碼
#include <iostream>
using namespace std;
int main(){
string a;
while(cin >> a){
if(a=="END")break;
int al=a.length(),it=0;
string b,c;
for(;a[it]!='-';++it)
b+=a[it];
for(++it;it<al;++it)
c+=a[it];
int bl=b.length(),cl=c.length();
it=1;
char f=b[bl-1];
if(c[0]=='a'){
if(f=='a')
b[bl-1]='a';
else if(f=='e')
b[bl-1]='y';
else if(f=='o')
b[bl-1]='w';
}
else if(c[0]=='e'){
if(f=='a')
b[bl-1]='a';
else if(f=='e'){
b[bl-1]='e';
b+='i';
}
else if(f=='o'){
b[bl-1]='o';
b+='u';
}
}
else if(c[0]=='i'){
if(f=='a'){
b[bl-1]='a';
b+='i';
}
else if(f=='e'){
b[bl-1]='e';
b+='i';
}
else if(f=='o'){
b[bl-1]='o';
b+='i';
}
}
else if(c[0]=='y'){
if(f=='a')
b[bl-1]='a';
else if(f=='e')
b[bl-1]='y';
else if(f=='o')
b[bl-1]='w';
}
else if(c[0]=='o'&&c[1]=='u'){
if(f=='a'){
b[bl-1]='w';
it=2;
}
else if(f=='e')
b[bl-1]='o';
else if(f=='o')
b[bl-1]='o';
}
else if(c[0]=='o'){
if(f=='a')
b[bl-1]='w';
else if(f=='e'){
b[bl-1]='o';
b+='u';
}
else if(f=='o'){
b[bl-1]='o';
b+='u';
}
}
else if(c[0]=='w'){
if(f=='a')
b[bl-1]='w';
else if(f=='e')
b[bl-1]='w';
else if(f=='o')
b[bl-1]='w';
}
cout << b;
for(;it<cl;++it)
cout << c[it];
cout << "\n";
}
}