参考书籍: 编程之法
若B中的所有字符都可以在A中找到,A包含B;
方法1:
暴力求解
bool StringContain(string &a,string &b)
{
for(int i=0;i<b.length();i++)
{
for(int j=0;j<a.length()&&(b[i]!=a[j]);j++);
if(j>=a.length())
{
return false;
}
}
return true;
}
方法2:
排序后,求解
bool StringContain(string &a,string &b)
{
sort(a.begin(),a.end());
sort(b.begin(),b.end());
int i,j;
for(i = 0;i<b.length();i++)
{
for(j = 0;j<a.length()&&(a[j]!=b[i]);j++);
if(j>=a.length())
{
return false;
}
}
return true;
}
方法3:
散列表:为 a 中的字符串建立一个散列表,b 中的字符去散列表查询,如果散列表中不存在字符,那么 a 就不包含 b
bool StringContain(string &a,string &b)
{
int hash; // 散列表
int i;
for(i = 0;i<a.length();i++)
{
hash |= 1<<(a[i]-'A'); // 把位置1;
}
for(i = 0;i<b.length();i++)
{
if((hash & (a<<(b[i]-'A'))) == 0)
{
return false;
}
}
return true;
}