求一个字符串中连续出现次数最多的子串

来源:互联网 发布:北大软禁季羡林 知乎 编辑:程序博客网 时间:2024/05/22 14:44


把字符串写成后缀组其实相当于站在不同的位置往后看这个数组,所以其实并不需要额外增加存储空间来生成后缀组。

#include <iostream>#include <string>using namespace std;void main(){    string str = "abcbcbcabc";    int len = str.length();    int maxCount = 0;    string longest = "";    for(int pos1 = 0; pos1 < len; pos1++)        for(int pos2 = pos1 + 1; pos2 < len; pos2++){            if(str.substr(pos1,pos2-pos1) == str.substr(pos2,pos2-pos1)){                int offset = pos2-pos1;                int count = 2;                for(int k = pos2 + offset; k <= len; k += offset){                    if(str.substr(pos1,offset) == str.substr(k,offset)){                        count += 1;                    }else{                        break;                    }                }                if(count > maxCount){                    maxCount = count;                    longest = str.substr(pos1,offset);                }            }        }    cout << longest << "," << maxCount << endl;}
原文转自

http://www.cnblogs.com/elaron/p/3330026.html

0 0
原创粉丝点击