给定一个字符串,将其组成的所有可能长度的字符串都列出来

问题简介

给定一个字符串,要求列出所有可能的长度组成的字符串。

问题分析

我们可以通过枚举所有的子串,得到该字符串中所有长度不相同的子串,然后再组合。

Step1:获取所有长度不相同的子串

我们可以使用两个指针,分别指向子串的开头和结尾,然后不断往后移动结尾指针,直到出现重复的字符为止。接着移动开头指针,直到重复字符的位置,得到一个长度不相同的子串。

vector getUnrepeatedSubstr(const string& str){

vector<string> substrs;

for(int i=0;i<str.size();i++){

for(int j=i+1;j<=str.size();j++){

bool flag=true;

for(int k=i;k<j;k++){

if(str[k]==str[j]) {

flag=false;

break;

}

}

if(flag){

substrs.emplace_back(str.substr(i,j-i));

}

}

}

return substrs;

}

上面的代码可以得到一个字符串中所有长度不相同的子串。

Step2:将子串组合成所有可能的长度

我们可以通过两重循环,将所有长度组合得到。

vector<string> getAllSubstrings(const string& str){

vector<string> substrs=getUnrepeatedSubstr(str);

vector<string> result;

for(int i=1;i<=str.size();i++){

for(auto substr:substrs){

if(substr.size()==i) result.emplace_back(substr);

else if(substr.size()<i){

int len=i-substr.size();

for(int j=0;j<sub[0].size();j++){

for(auto s:substrs){

if(s.size()==len){

string str=substr+s;

result.emplace_back(s);

}

}

}

}

}

}

return result;

}

上面的代码可以得到一个字符串中所有可能长度的子串。

问题解决

我们可以将上面两个函数分别调用即可得到该字符串中所有可能长度的子串。

vector<string> getAllSubstrings(const string& str);

总结

通过本篇文章,我们可以了解到如何列出一个字符串中所有可能长度的子串。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签