- 基本算法描述:
- 给出一个字符串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个字母匹配.
- 如果匹配的并记下匹配次数.如此可以求得最长连续匹配子串.
-
#include<iostream> #include<string> #include<vector> using namespace std; pair< int ,string >fun( const string &str ) { vector<string> substrs; int len = str.size(); int maxcount = 1; int count = 1; string sub; for( int i =0 ; i < len ; i++ ) { substrs.push_back(str.substr(i,len-i)); } for( int i=0; i < len; i++ ) { for( int j = i+1; j < len; j++ ) { count=1; for( int k = j; k < len; k+= j-i) { if( str.substr(i,j-i)==substrs[k].substr(0,j-i)) count++; else break; } if( count > maxcount ) { maxcount=count; sub=str.substr(i,j-i); } } } return make_pair(maxcount,sub); } int main() { char c[]="abcbcdbc"; string str(c); pair<int,string> result; result=fun(str); cout<<result.first<<endl; cout<<result.second<<endl; system("pause"); return 0; }
转载于:https://www.cnblogs.com/litana/p/3278574.html