字符串的最长重复子串
#if 1 #include <iostream> #include <stdlib.h> using namespace std; int pstrcmp(const void* st1, const void* st2){ return strcmp(*(const char**)st1, *(const char**)st2); } int comlen(char* str1, char* str2){ int i = 0; while (*str1 && (*str1++ == *str2++)){ ++i; } return i; } //后缀数组 void longestCommonSubstring(char* src, char* dest){ if (src == nullptr){ return; } int len = strlen(src); char* c = new char[len + 1]; char** a = new char*[len]; for (int i = 0; i < len; ++i){ c[i] = src[i]; a[i] = &c[i]; } c[len] = 0; qsort(a, len, sizeof(char*), pstrcmp); for (int i = 0; i < len; ++i){ cout << a[i] << endl; } int maxi = 0; int thislen = 0; int maxlen = -1; for (int i = 0; i < len-1; ++i){ thislen = comlen(a[i], a[i + 1]); if (thislen > maxlen){ maxlen = thislen; maxi = i; } } strcpy_s(dest, strlen(a[maxi])+1, a[maxi]); delete[] a; delete[] c; } int istrcmp(const void* st1, const void* st2){ return *(const int*)st1 - *(const int*)st2; } void ds(){ int tt[3] = { 7, 5, 4 }; qsort(tt, 3, sizeof(int), istrcmp); for (int i = 0; i < 3; ++i){ cout << tt[i] << endl; } char* p[3] = { "67","54","32"}; qsort(p, 3, sizeof(p[0]), pstrcmp); for (int i = 0; i < 3; ++i){ cout << p[i] << endl; } } int main(){ char* str = "banana"; char a[100]; longestCommonSubstring(str, a); cout << a << endl; ds(); return 0; } #endif
下一篇:
表示数值的字符串(Java实现)