蓝桥杯算法训练 Anagrams问题
2017-12-20 14:30
260 查看
算法训练 Anagrams问题 时间限制:1.0s 内存限制:512.0MB问题描述 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的。例如,“Unclear”和“Nuclear”、“Rimon”和“MinOR”都是Anagrams。编写一个程序,输入两个单词,然后判断一下,这两个单词是否是Anagrams。每一个单词的长度不会超过80个字符,而且是大小写无关的。
输入格式:输入有两行,分别为两个单词。
输出格式:输出只有一个字母Y或N,分别表示Yes和No。
输入输出样例样例输入Unclear
Nuclear样例输出Y
定义一个维度为128的hashTable数组(ascii码共计128个),数组元素初始化为0,遍历两个字符串,对于第一个字符串中每一个字符,将hashTable数组的对应位置的元素+1;对于第二个字符串中每一个字符,将hashTable数组的对应位置的元素-1。遍历整个hashTable数组,如果有不为0的元素,则不是Anagrams;否则是Anagrams。
输入格式:输入有两行,分别为两个单词。
输出格式:输出只有一个字母Y或N,分别表示Yes和No。
输入输出样例样例输入Unclear
Nuclear样例输出Y
算法设计:
首先如果两个字符串长度不等,则必然不是Anagrams。定义一个维度为128的hashTable数组(ascii码共计128个),数组元素初始化为0,遍历两个字符串,对于第一个字符串中每一个字符,将hashTable数组的对应位置的元素+1;对于第二个字符串中每一个字符,将hashTable数组的对应位置的元素-1。遍历整个hashTable数组,如果有不为0的元素,则不是Anagrams;否则是Anagrams。
注意点:
不区分大小写,可以将利用tolower()函数将字符串每个字符转换为小写字符c++代码:
#include<bits/stdc++.h> using namespace std; int main(){ //读取两个字符串 char s1[85],s2[85]; gets(s1); gets(s2); int len1=strlen(s1),len2=strlen(s2);//读取两个字符串长度 if(len1!=len2){//如果字符串长度不等,输出N printf("N"); return 0; } int hashTable[128];//定义辅助数组 memset(hashTable,0,sizeof(hashTable));//将数组元素初始化为0 for(int i=0;i<len1;++i){ ++hashTable[tolower(s1[i])];//将hashTable数组的对应位置的元素+1 --hashTable[tolower(s2[i])];//将hashTable数组的对应位置的元素-1 } //遍历hashTable数组查找是否有元素不为0 for(int i=0;i<128;++i) if(hashTable[i]!=0){//元素不为0输出N printf("N"); return 0; } printf("Y");//输出Y return 0; }
相关文章推荐
- 蓝桥杯-算法训练-算法训练 Anagrams问题 -Java
- 蓝桥杯- 算法训练 Anagrams问题
- 蓝桥杯 算法训练 Anagrams问题
- 蓝桥杯:算法训练 Anagrams问题
- 蓝桥杯 算法训练 Anagrams问题
- 蓝桥杯 算法训练 Anagrams问题
- 蓝桥杯—— 算法训练 Anagrams问题
- 蓝桥杯---算法训练 Anagrams问题
- 蓝桥杯 ALGO-91 算法训练 Anagrams问题
- 蓝桥杯-算法训练-Anagrams问题
- 蓝桥杯 ALGO-91 算法训练 Anagrams问题
- 2016蓝桥杯算法训练——Anagrams问题
- 蓝桥杯 算法训练 Anagrams问题
- 蓝桥杯- 算法训练 Anagrams问题
- 蓝桥杯 算法训练 Anagrams问题
- 算法-蓝桥杯-算法训练 Anagrams问题 (JAVA)
- [蓝桥杯]算法训练 Anagrams问题
- 蓝桥杯 算法训练 装箱问题 (DP)
- 蓝桥杯 - 算法训练 接水问题 C语言实现
- 算法训练 Anagrams问题