给定一个长字符串a和一个短字符串b,判断短字符串b的所有字符串都是否在a中。
分析:
1.可以采用论询的方法。
2.轮询短字符串中的每一个字符,逐个与长字符串a中的字符进行比较
3.查找是否都在a中
代码:
#include<stdio.h>
#include<string>
#include<iostream>
using namespace std;
bool StringContain(string &a,string &b)
{
for(int i=0;i<b.length();i++)
{
for(int j=0;(j<a.length())&& (a[j]!=b[i]);j++)
;
if(j>=a.length())
return false;
}
return true;
}
void main()
{
string a = "ABCD";
string b = "BGD";
if(StringContain(a,b))
cout<<"contain"<<endl;
else
cout<<"NO contain"<<endl;
}
第二种方法:
1.先进行排序
2.然后进行轮询比较
3.时间复杂度O(m+n),排序时间复杂度为O(mlogm)+O(nlogn)
代码:
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
using namespace std;
bool StringContain(string &a,string &b)
{
sort(a.begin(),a.end());
sort(b.begin(),b.end());
for(int pa=0,int pb=0;pb<b.length();)
{
while((pa<a.length()) && (a[pa] <b[pb]))
{
++pa;
}
if((pa>=a.length()) || (a[pa]>b[pb]))
{
return false;
}
++pb;
}
return true;
}
void main()
{
string a="ABCD";
string b="BCD";
if(StringContain(a,b))
{
cout<<"contain"<<endl;
}
else
{
cout<<"No contain"<<endl;
}
}