【面试题】:兄弟字符串
2015-11-04 22:20
573 查看
问题
如果两个字符串的字符一样,但是顺序不一样,被认为是兄弟字符串,问如何在迅速匹配兄弟字符串?解法
思路一:很简单,就是把两个字符串排序,我这里通过是C++的系统自带的排序函数,然后排序完都相同则证明是兄弟字符串
思路二:
要知道,每个字符都有着自己的ASCII码,我通过把字符对应的那个ASCII码值矩阵的值增加,然后判断字符出现了几次,如果两个字符串的ASCII码值矩阵都相同,则判断是兄弟字符串。
下面给出两种代码:
代码1
#include <iostream> #include <algorithm> using namespace std; int main(){ char s1[20],s2[20]; cin>>s1>>s2; sort(s1,s1+strlen(s1)); //排序 sort(s2,s2+strlen(s2)); //排序 if(strcmp(s1,s2)==0) cout<<"yes"<<endl; else cout<<"no"<<endl; return 0; }
代码2(需要仔细瞅瞅)
#include <iostream> using namespace std; int res1[256],res2[256]; //两个ASCII码值矩阵 int main(){ memset(res1,0,sizeof(res1)); //全部置0 memset(res2,0,sizeof(res2)); //全部置0 char s1[50],s2[50]; cin>>s1>>s2; if(strlen(s1)==strlen(s2)){ for(int i=0;i<strlen(s1);i++){ res1[s1[i]]++; //相应ASCII码值矩阵增加值 res2[s2[i]]++; //相应ASCII码值矩阵增加值 } for(i=0;i<256;i++){ //判断是否相等 if(res1[i]!=res2[i]){ cout<<"no"; return 0; } } cout<<"yes"<<endl; } else cout<<"no"<<endl; }
关于结果
两个代码都已经测试通过,为兄弟字符串输出yes,否则输出no给出运行截图,都一样,所以只给一个了 = =
hope you happy everyday = =
seen
相关文章推荐
- 黑马程序员——java中的关键字
- 知名公司的Java面试题
- ——黑马程序员——OC中self和super关键字的使用
- 黑马程序员—Java基础—IO5
- 黑马程序员—Java基础—IO4
- 程序员成长之路---“学习”与“面试笔试”总结篇之曲折的成长历程与求职历程
- 面试基础题
- 程序员学习交流的网站论坛
- 黑马程序员—Java基础—IO3
- 不少程序员都会碰到的三个面试题
- Android面试题之——内存泄露
- 黑马程序员—Java基础—IO2
- 周一晚上(2015.11.4)朋友模拟的一次面试
- 面试题11:实现函数 double Power(double base, int exponent)。求base的exponent的次方。不使用库函数。
- 黑马程序员—Java基础—IO1
- 上周二的一个面试(==)
- 程序员如何写出一份好的文档?
- 黑马程序员——Java基础---面向对象
- 黑马程序员_简易版IE浏览器 2.0
- 对程序员最具影响力的十本书