利用后缀数组求字符串中的最长公共字串——编程珠玑15章

#include "stdafx.h" #include <iostream> #include <algorithm> using namespace std; /************************************************************************/ //函数功能:求字符串str1和str2的公共序列的长度 /************************************************************************/ size_t commomLength(const char *str1, const char *str2) { size_t res = 0; while (*str1 != '/0' && *str2 != '/0' && *str2++ == *str1++) res++; return res; } /************************************************************************/ //函数功能:通过后缀数组来求字符串str中重复出现的最长公共字串 /************************************************************************/ void FindLongDup(char *str) { int len = strlen(str); char **suffixArr = new char*[len]; //后缀数组 for (int i = 0; i < len; i++) //初始化 suffixArr[i] = &str[i]; for (int i = 0; i < len - 1; i++) //排序,本来用qsort的但是用了没效果 { int min_ele = i; for (int j = i + 1; j < len; j++) { if (strcmp(suffixArr[j], suffixArr[min_ele]) < 0) { min_ele = j; } } swap(suffixArr[i], suffixArr[min_ele]); } int result = 0; //记录字串长度 int pos = 0; //记录字串的位置 for (int i = 1; i < len; i++) { int commonLen= commomLength(suffixArr[i-1], suffixArr[i]); if ( commonLen > result) { result = commonLen; pos = i - 1; } } cout<<"The longest common length is :"<<result<<endl; cout<<"The longest common substring is :"<<suffixArr[pos]<<endl; } int main() { char *str = "banana"; FindLongDup(str); } 

你可能感兴趣的:(编程,include)