正在讀july的算法解析的書……..
//////////////////////////////////////////////////////////////////////////
///字符串包含, 字符串 a 中包含 b 中的字符串字母,如果b字符串大於a字符串即返回false 例如1: 字符串a ANFGM 字符串b AFM 返回true . 例如2: 字符串a ANFGM 字符串b ABC 返回false
///1. 強制循環判斷,比較浪費資源,最不好的一種方法
///2. 排序後在循環比較,排序也很浪費資源
/////////////////////////////////////////////////////////////////////////
#inlcude<iostream>
#include<algorithm>
using namespace std;
//直接比較
bool stringContain1(string &a, string &b);
//排序後比較
bool stringContain2(string &a, string &b);
int main()
{
string a = "fdeabc";
string b = "acf";
bool br = stringContain1(a, b);
string an = "fdeabc";
string bn = "acf";
bool brn = stringContain2(an, bn);
return 0;
}
//////函數實現,直接循環查找
bool stringContain1(string &a, string &b)
{
if(a.length() < b.length())
{
return false;
}
for(int i = 0; i < b.length(); ++i)
{
int j = 0;
while( j < a.length())
{
if(b[i] == a[j])
{
//如果找到相等字符,即退出查找
break;
}
++j;
if(j >= a.length())
{
//最後一個循環完後還沒找到相同字母,即表示返回false
return false;
}
}
}
return true;
}
//先排序後循環比較
bool stringContain2(string &a, string &b)
{
if(a.length() < b.length())
{
return false;
}
sort(a.begin(), a.end());
sort(b.begin(), b.end());
int ia = 0;
for(int ib = 0; ib < b.length(); )
{
while((ia < a.length()) && (a[ia] < b[ib]))
{
++ia;
}
if((ia >= a.length()) || (a[ia] > b[ib]))
{
return false;
}
++ib;
}
return true;
}