您的位置:首页 > 职场人生

一道腾讯面试题

2012-10-29 12:53 218 查看
题目描述:

假设两个字符串中所含有的字符和个数都相同我们就叫这两个字符串匹配,比如:abcda和adabc,由于出现的字符个数都是相同,只是顺序不同,所以这两个字符串是匹配的。要求高效!

我的解法是借用 异或运算,在长度相同的情况下,对所有的字符进行累积异或,由异或的性质,相同的数异或为0,异或满足交换律。时间只有O(n)

代码如下:

[cpp]
view plaincopyprint?

/************************************************************************/
/*

假设两个字符串中所含有的字符和个数都相同我们就叫这两个字符串匹配,
比如:abcda和adabc,由于出现的字符个数都是相同,只是顺序不同,
所以这两个字符串是匹配的。要求高效!
*/
/************************************************************************/

#include <IOSTREAM>
#include <string>

#include <ASSERT.H>
using namespace std;

bool isStrMatching(const char* str1,const char* str2)
{
assert( str1!=NULL && str2!=NULL);

int len1=strlen(str1);
int len2=strlen(str2);

if( len1 != len2 )
return false;

int flag=0,i=0;

for(;i<len1;i++)
flag^=( str1[i]^str2[i] );

return (flag==0);
}

void main()
{
char str1[]="abcda";
char str2[]="adabc";

if( isStrMatching(str1,str2) )
cout<<"yes.\n";
else
cout<<"no.\n";
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: