码迷,mamicode.com
首页 > 其他好文 > 详细

需找字符串中重复的最长子串

时间:2015-06-15 01:47:35      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:

注意此处说的是重复的最长子串,只要出现重复就好,没说重复的次数。

下面给出的代码是编程珠玑中给出的一种实现。

他是通过后缀数组的方式实现的。

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
using namespace std;
int comlen(char*p, char*q)//找出公共的最长子串
{
	int i = 0;
	if (p == NULL || q == NULL)
		return 0;
	while ( (*p++ == *q++))
		i++;
	return i;
}
int pstrcmp(const void*a, const void*b)
{
	return strcmp(*(char**)(a),*(char**)(b));
}
int main()
{
	char* s = "abcdabce";
	char* a[8];//指针后缀数组
	for (int i = 0;; i++)
	{
		if (s[i] == 0)
			break;
		a[i] = &s[i];//指针后缀数组赋值
	}
	qsort(a, 8, sizeof(char*), pstrcmp);
	int maxlen = 0,maxi=0;
	for (int i = 0; i < 7; i++)//找出相邻的最大子串
				if (comlen(a[i], a[i + 1])>maxlen)
			{
			maxlen = comlen(a[i], a[i + 1]);
			maxi = i;
			}
	printf("%.*s\n", maxlen, a[maxi]);
	}

在这里特别说明一下在书中没有给出pstrcmp的实现,当时写的程序时候出现的bug位子就是这里。

int pstrcmp(const void*a, const void*b)
{
	return strcmp(*(char**)(a),*(char**)(b));//注意此处的char**而不是char*
}

技术分享

需找字符串中重复的最长子串

标签:

原文地址:http://blog.csdn.net/zhouyelihua/article/details/46496747

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!