字符串包含

题目描述:

给定两个分别由字母组成的字符串A和字符串B,字符串B的长度比字符串A短。请问,如何最快地判断字符串B中所有字母是否都在字符串A里?

实现函数bool StringContains(string &A, string &B)

比如,如果是下面两个字符串:

String 1:ABCD

String 2:BAD

答案是true,即String2里的字母在String1里也都有,或者说String2是String1的真子集。

方法一:用了C++中的find函数。

bool StringContains(string &A, string &B)
{
    string::size_type idx;
    idx = A.find(B);
    if(idx == string::npos )//不存在。
        return false;
    else//存在。
        return true; 
}
int main()
{
    string s1,s2;
    getline(cin,s1);
    getline(cin,s2);
    bool p = StringContains(s1,s2);
    if (p==1)
    {    cout<<"True"<<endl;
    }
    else    cout<<"False"<<endl;
    return 0;
}

方法二:排序后比较;分别将两个字符串排序,然后比较;如果第一个字符串中的字符小于第二个字符串中的字符,那么比较第一个字符串中此字符后面的字符,如果相等第二个字符串中的字符++,不相等就继续比较;如果第一个字符的pa指向最后那么证明没找到,返回false;或者第一个字符中的字符大于第二个字符中的字符也即没找到。

bool StringContains(string &a,string &b)
{
    sort(a.begin(),a.end());
    sort(b.begin(),b.end());
    int pa=0,pb = 0;
    for (int i = 0; i < b.length(); i++)
    {
        while (pa<a.length()&&(a[pa]<b[pb]))
        {
            ++pa;
        }
        if ((pa>=a.length())||a[pa]>b[pb])
        {
            return false;
        }
        ++pb;
    }
    return true;
}

1、变位词

  • 如果两个字符串的字符一样,但是顺序不一样,被认为是兄弟字符串,比如bad和adb即为兄弟字符串,现提供一个字符串,如何在字典中迅速找到它的兄弟字符串,请描述数据结构和查询过程。

参考:

https://github.com/julycoding/The-Art-Of-Programming-By-July/blob/master/ebook/zh/01.02.md

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值