标签:string set for new amp div
int out_max_length_crease_str(const char *p, std::vector<std::string> &vct)
{
vct.clear();
int nlen = strlen(p);
if (nlen == 0){
return 0;
}
if (nlen == 1){
vct.push_back(p);
return 1;
}
char *buf = new char(nlen);
memset(buf, 0, nlen);
char first_char = *p;
char *pbuf = buf;
while (*++p != 0){
if (*p > first_char){
*pbuf++ = *p;
}
}
if (pbuf == buf){
std::string s;
s += first_char;
vct.push_back(s);
return 1;
}
int nret = 0;
std::vector<std::string> vct_temp;
const char *temp = buf;
for (; *temp != 0; ++temp){
int ntemp = out_max_length_crease_str(temp, vct_temp);
if (ntemp > nret){
nret = ntemp;
vct.swap(vct_temp);
}
else if (ntemp == nret){
vct.insert(vct.end(), vct_temp.begin(), vct_temp.end());
}
}
std::string s;
for (std::string &str : vct){
str.insert(str.begin(), first_char);
}
return nret + 1;
}
int out_max_length_crease_str_ex(const char *p, std::vector<std::string> &vct)
{
int max_lenth = 0;
std::vector<std::string> vct_temp;
const char *temp = p;
for (; *temp != 0; ++temp){
int lenth = out_max_length_crease_str(temp, vct_temp);
if (lenth > max_lenth){
max_lenth = lenth;
vct.swap(vct_temp);
}
else if (lenth == max_lenth){
vct.insert(vct.end(), vct_temp.begin(), vct_temp.end());
}
}
return max_lenth;
}
int n = out_max_length_crease_str_ex("etphdumei", vct);
n = out_max_length_crease_str_ex("vfleqiynp", vct);
n = out_max_length_crease_str_ex("abdfghimo", vct);
n = out_max_length_crease_str_ex("QMWBZGZGE", vct);
只不过目前没有去重,最后一个例子,会返回几个重复的。
int out_max_length_crease_str(const char *p, std::vector<std::string> &vct)
{
vct.clear();
int nlen = strlen(p);
if (nlen == 0){
return 0;
}
if (nlen == 1){
vct.push_back(p);
return 1;
}
char *buf = new char[nlen];
memset(buf, 0, nlen);
char first_char = *p;
char *pbuf = buf;
while (*++p != 0){
if (*p > first_char){
*pbuf++ = *p;
}
}
if (pbuf == buf){
std::string s;
s += first_char;
vct.push_back(s);
return 1;
}
int nret = 0;
std::vector<std::string> vct_temp;
pbuf = buf;
for (; *pbuf != 0; ++pbuf){
int ntemp = out_max_length_crease_str(pbuf, vct_temp);
if (ntemp > nret){
nret = ntemp;
vct.swap(vct_temp);
}
else if (ntemp == nret){
vct.insert(vct.end(), vct_temp.begin(), vct_temp.end());
}
}
delete []buf;
for (std::string &str : vct){
str.insert(str.begin(), first_char);
}
return nret + 1;
}
随意输入N个英文字符,找出其中最长连续的排列。,布布扣,bubuko.com
随意输入N个英文字符,找出其中最长连续的排列。
标签:string set for new amp div
原文地址:http://www.cnblogs.com/For-her/p/3785578.html