标签:
注意此处说的是重复的最长子串,只要出现重复就好,没说重复的次数。
下面给出的代码是编程珠玑中给出的一种实现。
他是通过后缀数组的方式实现的。
#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]); }
int pstrcmp(const void*a, const void*b) { return strcmp(*(char**)(a),*(char**)(b));//注意此处的char**而不是char* }
标签:
原文地址:http://blog.csdn.net/zhouyelihua/article/details/46496747