您的位置:首页 > 其它

一天一道算法题--5.28--字符串的映射

2014-05-28 19:12 357 查看
感谢 微信平台: 一天一道算法题 ---------------- 每天多一点进步---------------

这题 根据题意 网上终于找到个 相似的题目

戳我

原题 给的实在太长了 我给你简短翻译一下:

给定两个长度均为N的字符串( N<=100) 判断它们之间的26个字母能否一一对应 如abb和cdd可以相互对应 方法是a->c b->d

要是相同 输出YES 否则 输出NO

//先去次饭了 回来再写下去。。。。

go on。。。

讲下这题的思路:

既然是字母一一对应的 那么如果是YES的情况下 那么相对应的字母的个数必然是相等的 想到这里 这题就不难了 就是怎么将字符串中每个字母出现的次数保存下来

这边 注意的是 不能忘记了排序 你可能A中 保存了3个a 2个b B中保持了2个c 3个d 要是不进行排序 可能导致2和3 进行比较 就得出了错误的结论

这边它提供了 用 map的做法 看上去 的确 高大上 而且很舒服

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

char strA[110] , strB[110];
int cntA[110] , cntB[110];

int main()
{
int i;
bool flag;
while( ~scanf("%s %s",strA,strB) )
{
flag = true;
memset( cntA , 0 , sizeof(cntA) );
memset( cntB , 0 , sizeof(cntB) );
for( i = 0 ; strA[i]!='\0' ; i++ )
{
cntA[ 'Z'-strA[i] ]++;
cntB[ 'Z'-strB[i] ]++;
}
sort( cntA , cntA+26 );
sort( cntB , cntB+26 );
for( i=0 ; i<=25 ; i++ )
{
if( cntA[i]!=cntB[i] )
{
flag = false;
break;
}
}
printf( "%s\n",flag?"YES":"NO" );
}
return 0;
}


View Code

最近 要作web 又要应付 高数 ....

有个妹子 陪伴就好了

new 一个出来?

可以不 delete 吗..................
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: