算法学习之字符串包含

来源:互联网 发布:软考程序员考什么 编辑:程序博客网 时间:2024/06/06 20:15

   问题描述:如果字符串B中的字母都能在A中出现,则字符串A包含字符串B,

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

#include <stdio.h>#include <stdlib.h>#define  MAX   50int 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;}


0 0
原创粉丝点击