字符串是否包含的问题

来源:互联网 发布:费米估算知乎 编辑:程序博客网 时间:2024/05/12 22:53
//先进行排序bool compare(string &s1, string &s2){    int i = 0;    int j = 0;    sort(s1.begin(), s1.end());    sort(s2.begin(), s2.end());    //下面是线性扫描时间复杂度为O(M+N),因为其已经排序好了    while (i < s1.length() && j < s2.length())    {        while (s1[i] < s2[j] && i < s1.length() - 1)            i++;//直到找出不小于s2的元素        if (s1[i] != s2[j])            return false;        j++;    }    if (j == s2.length())        return true;    else        return false;}//哈希表的方法//考虑的是大写的元素//时间复杂度为O(n),空间复杂度O(n)bool compare1(string &s1, string &s2){    int hash[26] = { 0 };    int index = 0;    int num = 0;    //扫描短的字符串    for (int i = 0; i < s2.length(); i++)    {        int index = s2[i] - 'A';//变成int类型        if (hash[index] == 0)        {            hash[index] = 1;            num++;//即看hash表中存放了多少个字母        }    }    for (int i = 0; i < s1.length(); i++)    {        index = s1[i] - 'A';        if (hash[index] == 1)        {            num--;            if (num == 0)//表示所有的s2中字母在s1中都找到了                break;        }    }    if (num == 0)        return true;    else        return false;}
0 0