最长重复字符串

求解一个字符串中出现的最长的重复的字符串,可以重叠

可以使用后缀数组的解法,先建立后缀数组,然后将数组排序,最后比较相邻的数组之间是否存在相同字符子串

#include
#include
#include
#include
using namespace std;

vector suffixtree(string s) {
	vector vs(s.length());//用vs来保存这些元素
	for (int i = 0; i vs) {
	int maxLen = 0;
	string ret;
	for (int i = 0; i vec = suffixtree( "xasdasdvdvdvd" );
	string str = longcom(vec);
	cout << str;
}

解法二:KMP算法,注意此时的Next数组应该是没有经过优化的

#include
using namespace std;

int getNext(char *str, int *next)
{
	int len = strlen(str);
	int j = 0;
	int k = -1;
	next[0] = k;
	int max = 0;

	//kmp算法求next值,取得最大的字串  
	while (jmax)//求得其中重复最大的字串的个数,也就是与最前面串的重复数  
			{
				max = k;
			}
		}
		else
			k = next[k];
	}

	return max;
}




int main()
{
	char str[50];//输入字符串  
	cin >> str;
	int max = 0;//最大的字串  
	int nextMax;//接受getNext函数中返回的最大值  
	int index;
	int maxIndex;//保存最大的字串起始位置  
	int len = strlen(str);
	//将一个字符串从开始一直减少到只剩一个字符,通过这个取得最小字串  
	for (index = 0; indexmax)
		{
			max = nextMax;
			maxIndex = index;
		}
	}

	//输出最长字串  
	cout << "最长字串: ";
	for (index = 0; index



你可能感兴趣的:(数据结构与算法)