1. 程式人生 > >字串的最長重複子串

字串的最長重複子串

#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

這裡寫圖片描述