问题
如果两个字符串的字符一样,但是顺序不一样,被认为是兄弟字符串,问如何在迅速匹配兄弟字符串?
解法
思路一:
很简单,就是把两个字符串排序,我这里通过是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