在字符串中查找连续重复的最长子串的C++实现

来源:互联网 发布:java 1到100阶乘 编辑:程序博客网 时间:2024/05/17 01:41


#include "stdafx.h"#include <stdlib.h>#include <iostream>#include <string>#include <vector>using namespace std;/****************************************************************功能:写一个函数,找出一个字符串中最长的连续重复子串。Exmaple:Input: abcabbcabc    output: 2:bcab原理:substr0  abcabbcabcsubstr1   bcabbcabcsubstr2    cabbcabcsubstr3     abbcabcsubstr4      bbcabcsubstr5       bcabcsubstr6        cabcsubstr7         abcsubstr8          bcsubstr9           c****************************************************************/pair<int,string> fun(const string& str){vector<string> substrs;  // vecotrint maxcount = 1, count =1;string substr;int i,len = str.length();for(i=0; i<len; ++i)substrs.push_back(str.substr(i,len-i));for(i=0; i<len; ++i){for(int j=i+1; j<len; ++j){count = 1;if(substrs[i].substr(0,j-i) == substrs[j].substr(0,j-i)){++count;for(int k =j+(j-i); k<len; k+=(j-i)){if(substrs[i].substr(0,j-i) == substrs[k].substr(0,j-i))++count;else break;}if (count> maxcount){maxcount = count;substr = substrs[i].substr(0,j-i);}}}}return make_pair(maxcount,substr);}int _tmain(int argc, _TCHAR* argv[]){string str;pair<int,string> rs;cout<<"Please Input a string:";while(cin>>str){rs = fun(str);cout<<rs.second<<":"<<rs.first<<'\n';cout<<"Please Input a string:";}return 0;}


// 运行结果


原创粉丝点击