您的位置:首页 > 其它

字符串包含, 字符串 a 中包含 b 中的字符串字母,如果b字符串大于a字符串即返回false

2016-01-28 17:30 204 查看
正在读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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  字符串