您的位置:首页 > 其它

算法学习之字符串包含

2016-02-21 17:31 225 查看
   问题描述:如果字符串B中的字母都能在A中出现,则字符串A包含字符串B,

本题可用位运算,用两个long long类型的数字参与位运算,两个long long类型正好128位,可以把字符串全部表示完,时间复杂度O(N),空间复杂度O(1);

#include <stdio.h>
#include <stdlib.h>
#define MAX 50
int is_contain(const char *str1,const char *str2)
{
long long tmp1 = 0,tmp2 = 0;//前64位放进tmp1,后64位放进tmp2;
int i = 0,n;
while(str1[i])
{
n = str1[i++] - '\0';
if(n < 63)
tmp1 |= 1<<n;
else
tmp2 |= 1<<(n%64);
}
i = 0;
while(str2[i])
{
n = str2[i++] - '\0';
if(n < 63)
{
if(!((1<<n)&tmp1))
return 0;
}
else
{
if(!((1<<(n%64)&tmp2)))
return 0;
}
}
return 1;
}
int main()
{
char str1[MAX],str2[MAX];
scanf("%s %s",str1,str2);
if(is_contain(str1,str2))
printf("str1 contain str2\n");
else
printf("str1 does't contain str2");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法