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

例如字符串abcbcbcabc,连续出现次数最多的子串是bc,出现次数为3

后缀数组:

abcbcbcabc    第0个

bcbcbcabc    第1个

cbcbcabc    第2个

bcbcabc    第3个

cbcabc    第4个

bcabc    第5个

cabc    第6个

abc    第7个

bc    第8个

c    第9个

过程:先从第0个数组取出a,然后和第1个数组的b比较,发现不相等,然后取ab,abc,abcb....这一趟取完后,又从第1个后缀数组开始取,取b,bc,bcb,bcbc...

当出现连续的子串时,比如bc,出现在第1个后缀数组的前部分,他下一次出现的地方就在 1 + len(bc) = 1+2 = 3,也就是第3个后缀数组的前部分,再下一次就在3+2=5,第5个后缀数组的qia前面。

#include
#include
using namespace std;

void fun(const string& str,string& substr,int& max_cnt)
{	
	int len = str.length();
	for(int i =0;imax_cnt)
			{
				max_cnt = tmp_cnt;
				substr = str.substr(i,offset);
			}
		}
	}
}

int main()
{
	string str;
	cin>>str;
	string substr;
	int max_cnt = 1;
	fun(str,substr,max_cnt);
	cout<

 

你可能感兴趣的:(各公司笔试题)