# String Manipulation# Comparison# Greedy

e554 - 11713 - Abstract Names

🔗 前往 ZeroJudge 原題

題目描述

題目要求判斷兩個字串是否為抽象名稱,即它們是否具有相同的長度,並且僅在母音的位置上有所不同。換句話說,遊戲中的名稱是否可以通過替換現實名稱中的母音來獲得。

解題思路

解題思路是首先檢查兩個字串的長度是否相等。如果長度不相等,則直接輸出 "No"。如果長度相等,則將兩個字串中的所有母音替換為 'a',然後比較替換後的兩個字串是否相等。如果相等,則輸出 "Yes",否則輸出 "No"。 這種方法利用了題目中母音可以被替換的特性,將比較問題簡化為比較替換後的字串是否相等。

複雜度分析

  • 時間複雜度: O(n),其中 n 是字串的長度。因為需要遍歷字串來替換母音和比較字串。
  • 空間複雜度: O(n),因為在最壞的情況下,需要複製字串來進行替換。

程式碼

#include <iostream>
using namespace std;
int main(){
	string a,b;
	cin >> a;
	while(cin >> a >> b){
		int al=a.length(),bl=b.length();
		if(al!=bl){
			cout << "No\n";
		}
		else{
			while(al--){
				if(a[al]=='a'||a[al]=='e'||a[al]=='i'||a[al]=='o'||a[al]=='u'){
					a[al]='a';
				}
			}
			while(bl--){
				if(b[bl]=='a'||b[bl]=='e'||b[bl]=='i'||b[bl]=='o'||b[bl]=='u'){
					b[bl]='a';
				}
			}
			if(a==b){
				cout << "Yes\n";
			}
			else{
				cout << "No\n";
			}
		}
	}
}

Discussion