字符串包含问题

字符串包含问题:判断小字符串的所有字符是否大字符串都有

    思路一:针对小字符串的每一个字符一一与大字符串的字符轮询比较即可,很明显时间复杂度为O(n*m)

bool compare(string s1,string s2)

{

    int j;

    for(int i = 0; i < s1.length(); i++)

    {

        for( j = 0; j < s2.length(); j++)

        {

            if(s1.at(i) == s2.at(j))

            {

                break;

            }

        }

        if(j==s2.length())

        {

            return false;

        }

    }

    return true;

}


    思路二:对两个字符串分别排序,同时依次轮询,则排序O(mlogm)+O(nlogn),轮询O(m+n);总时间复杂度为O(mlogm)+O(nlogn)+O(m+n)

int partition(string &str,int low,int high)

{

    int key = str[high];

    int i = low - 1;

    for(int j = low; j < high; j++)

    {

        if(str[j] <= key)

        {

            i++;

            swap(str[i],str[j]);

        }

    }

    swap(str[i+1],str[high]);

    return i+1;

}

 

void quickSort(string &str,int low,int high)

{

    if(low<high)

    {

        int k = partition(str,low,high);

        quickSort(str,low,k-1);

        quickSort(str,k+1,high);

    }

    return;

}

bool compare(string s1,string s2)

{

    int i = 0;

    int j = 0;

    while(i < s1.length() && j < s2.length())

    {

        while(s1[i] < s2[j] && i < s1.length() - 1)

            i++;

        if(s1[i] != s2[j])

            break;

        j++;

    }

    if(j==s2.length())return true;

    else return false;

}

int main()

{

    string s1 = "abd";

    string s2 = "absdfe";

    if(compare(s1,s2))

    {

        cout<<"包含"<<endl;

    }

    else

        cout<<"不包含"<<endl;

    return 0;

}



    思路三:hash表,将小字符串映射到初始化为0的表中,有则改为1.在轮询大字符串,有则将1改为0。最后如果表全为零,包含,否则不包含。则轮询了一次,复杂度为O(m+n)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值