藍橋杯——算法訓練——Anagrams問題

藍橋杯——算法訓練——Anagrams問題

挺水的一道題。
——————————————————————————————————————
資源限制
時間限制:1.0s 內存限制:512.0MB
問題描述
Anagrams指的是具有如下特性的兩個單詞:在這兩個單詞當中,每一個英文字母(不區分大小寫)所出現的次數都是相同的。例如,“Unclear”和“Nuclear”、“Rimon”和“MinOR”都是Anagrams。編寫一個程序,輸入兩個單詞,然後判斷一下,這兩個單詞是否是Anagrams。每一個單詞的長度不會超過80個字符,而且是大小寫無關的。
輸入格式
輸入有兩行,分別爲兩個單詞。
輸出格式
輸出只有一個字母Y或N,分別表示Yes和No。
樣例輸入
Unclear
Nuclear
樣例輸出
Y
——————————————————————————————————————
思路分析:這道題的思路很簡單,主要的問題就在於是不區分大小寫的。因此,我們可以開兩個小數組,分別用來記錄每個字母(無論大小寫)出現的次數,判斷和數組下標都可以藉助ASCII碼來操作,下面看代碼:

#include <iostream>
#include <string>
#include <string.h>
using namespace std;
int main(){
	string str_0, str_1;
	cin>>str_0>>str_1;
	int l_0 = str_0.length(), l_1 = str_1.length();
	if(l_0 != l_1) cout<<"N"<<endl;
	else{
		int a_0[30] = {0}, a_1[30] = {0};
		for(int i=0; i<l_0; i++){
			if((int)str_0[i] < 97) a_0[(int)str_0[i]-65]++;
			else a_0[(int)str_0[i]-97]++;
		}
		for(int i=0; i<l_1; i++){
			if((int)str_1[i] < 97) a_1[(int)str_1[i]-65]++;
			else a_1[(int)str_1[i]-97]++;
		}
		bool flag = true;
		for(int i=0; i<26; i++){
			if(a_0[i] != a_1[i]) flag = false;
		}
		if(flag) cout<<"Y"<<endl;
		else cout<<"N"<<endl;
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章