#include "stdafx.h" #include<iostream> #include<vector> #include<string> using namespace std; /*基本算法描述: 給出一個字符串abababa 1.窮舉出所有的後綴子串 substrs[0] = abababa; substrs[1] = bababa; substrs[2] = ababa; substrs[3] = baba; substrs[4] = aba; substrs[5] = ba; substrs[6] = a; 2.然後進行比較 substrs[0]比substrs[1]多了一個字母,如果說存在連續匹配的字符,那麼 substrs[0]的第1個字母要跟substrs[1]首字母匹配,同理 substrs[0]的前2個字母要跟substrs[2]的前2個字母匹配(否則不能叫連續匹配) substrs[0]的前n個字母要跟substrs[n]的前n個字母匹配. 如果匹配的並記下匹配次數.如此可以求得最長連續匹配子串. */ pair<int,string> fun(const string& str) { vector<string> substrs; int 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) cout << substrs[i] << endl; 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)//步長為j-i,子串的長度 { if(substrs[i].substr(0,j-1)==substrs[k].substr(0,j-1)) ++count; else break; } if(count>maxcount) { maxcount = count; substr=substrs[i].substr(0,j-1); } } } } return make_pair(maxcount,substr); } int _tmain(int argc, _TCHAR* argv[]) { string str="abcbcbcabc"; pair<int,string> rs = fun(str); }