【面试题】:兄弟字符串

问题

如果两个字符串的字符一样,但是顺序不一样,被认为是兄弟字符串,问如何在迅速匹配兄弟字符串?

解法

思路一:
很简单,就是把两个字符串排序,我这里通过是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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值