From 1d8cc338949705e5c635ded8ff60029dec4a6de4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BF=A6=E5=8B=92?= <1330884793@qq.com> Date: Fri, 1 Dec 2023 05:43:17 +0000 Subject: [PATCH 1/8] =?UTF-8?q?=E7=AC=AC=E4=B8=89=E7=AB=A0=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...5\274\217\345\214\271\351\205\215\347\256\227\346\263\225.cpp" | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2303\357\274\232\345\256\236\347\216\260\351\241\272\345\272\217\344\270\262\347\232\204\345\220\204\347\247\215\346\250\241\345\274\217\345\214\271\351\205\215\347\256\227\346\263\225.cpp" diff --git "a/2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2303\357\274\232\345\256\236\347\216\260\351\241\272\345\272\217\344\270\262\347\232\204\345\220\204\347\247\215\346\250\241\345\274\217\345\214\271\351\205\215\347\256\227\346\263\225.cpp" "b/2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2303\357\274\232\345\256\236\347\216\260\351\241\272\345\272\217\344\270\262\347\232\204\345\220\204\347\247\215\346\250\241\345\274\217\345\214\271\351\205\215\347\256\227\346\263\225.cpp" new file mode 100644 index 00000000..e69de29b -- Gitee From 1770f8fe7dc1424ff4f5a7a0598c745c21cb0a14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BF=A6=E5=8B=92?= <1330884793@qq.com> Date: Fri, 8 Dec 2023 00:49:31 +0000 Subject: [PATCH 2/8] =?UTF-8?q?=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...1\225\277\351\207\215\345\244\215\345\255\220\344\270\262.cpp" | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2305\357\274\232\346\261\202\344\270\200\344\270\252\344\270\262\344\270\255\345\207\272\347\216\260\347\232\204\347\254\254\344\270\200\344\270\252\346\234\200\351\225\277\351\207\215\345\244\215\345\255\220\344\270\262.cpp" diff --git "a/2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2305\357\274\232\346\261\202\344\270\200\344\270\252\344\270\262\344\270\255\345\207\272\347\216\260\347\232\204\347\254\254\344\270\200\344\270\252\346\234\200\351\225\277\351\207\215\345\244\215\345\255\220\344\270\262.cpp" "b/2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2305\357\274\232\346\261\202\344\270\200\344\270\252\344\270\262\344\270\255\345\207\272\347\216\260\347\232\204\347\254\254\344\270\200\344\270\252\346\234\200\351\225\277\351\207\215\345\244\215\345\255\220\344\270\262.cpp" new file mode 100644 index 00000000..e69de29b -- Gitee From a96bb055fb37abec71baa78cd2080d82a016dc3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BF=A6=E5=8B=92?= <1330884793@qq.com> Date: Fri, 8 Dec 2023 00:51:24 +0000 Subject: [PATCH 3/8] =?UTF-8?q?=E7=AC=AC=E4=B8=89=E7=AB=A0=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...5\207\272\347\216\260\347\232\204\346\254\241\346\225\260.cpp" | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2306\357\274\232\345\210\251\347\224\250KMP\347\256\227\346\263\225\346\261\202\345\255\220\344\270\262\345\234\250\344\270\273\344\270\262\344\270\255\344\270\215\351\207\215\345\217\240\345\207\272\347\216\260\347\232\204\346\254\241\346\225\260.cpp" diff --git "a/2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2306\357\274\232\345\210\251\347\224\250KMP\347\256\227\346\263\225\346\261\202\345\255\220\344\270\262\345\234\250\344\270\273\344\270\262\344\270\255\344\270\215\351\207\215\345\217\240\345\207\272\347\216\260\347\232\204\346\254\241\346\225\260.cpp" "b/2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2306\357\274\232\345\210\251\347\224\250KMP\347\256\227\346\263\225\346\261\202\345\255\220\344\270\262\345\234\250\344\270\273\344\270\262\344\270\255\344\270\215\351\207\215\345\217\240\345\207\272\347\216\260\347\232\204\346\254\241\346\225\260.cpp" new file mode 100644 index 00000000..e69de29b -- Gitee From bfafaf6412447a18e9526096347856fa0cb55a80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BF=A6=E5=8B=92?= <1330884793@qq.com> Date: Fri, 22 Dec 2023 06:29:05 +0000 Subject: [PATCH 4/8] =?UTF-8?q?=E7=AC=AC=E5=9B=9B=E7=AB=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...1\351\205\215\347\256\227\346\263\225.cpp" | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git "a/2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2303\357\274\232\345\256\236\347\216\260\351\241\272\345\272\217\344\270\262\347\232\204\345\220\204\347\247\215\346\250\241\345\274\217\345\214\271\351\205\215\347\256\227\346\263\225.cpp" "b/2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2303\357\274\232\345\256\236\347\216\260\351\241\272\345\272\217\344\270\262\347\232\204\345\220\204\347\247\215\346\250\241\345\274\217\345\214\271\351\205\215\347\256\227\346\263\225.cpp" index e69de29b..160276d5 100644 --- "a/2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2303\357\274\232\345\256\236\347\216\260\351\241\272\345\272\217\344\270\262\347\232\204\345\220\204\347\247\215\346\250\241\345\274\217\345\214\271\351\205\215\347\256\227\346\263\225.cpp" +++ "b/2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2303\357\274\232\345\256\236\347\216\260\351\241\272\345\272\217\344\270\262\347\232\204\345\220\204\347\247\215\346\250\241\345\274\217\345\214\271\351\205\215\347\256\227\346\263\225.cpp" @@ -0,0 +1,59 @@ +#include +#define MaxSize 100 + +void computeLPSArray(char pattern[], int M, int lps[]); + +void KMPSearch(char pattern[], char text[]) { + int M = strlen(pattern); + int N = strlen(text); + int lps[MaxSize]; + int i, j; + computeLPSArray(pattern, M, lps); + i = 0; + j = 0; + while (i < N) { + if (pattern[j] == text[i]) { + j++; + i++; + } + if (j == M) { + printf("Pattern found at index %d\n", i - j); + j = lps[j - 1]; + } + else if (i < N && pattern[j] != text[i]) { + if (j != 0) j = lps[j - 1]; + else i = i + 1; + } + } +} + +void computeLPSArray(char pattern[], int M, int lps[]) { + int len; + lps[0] = 0; + int i = 1; + while (i < M) { + if (pattern[i] == pattern[lps[i - 1]]) { + len = 0; + while (i < M && pattern[i] == pattern[lps[i - 1]]) { + len++; + i++; + } + lps[i] = lps[i - 1] + len; + } + else { + if (lps[i - 1] != 0) { + lps[i] = lps[lps[i - 1] - 1]; + } + else { + lps[i] = 0; + } + } + } +} + +int main() { + char pattern[] = "ABC"; + char text[] = "XYZABCDEFG"; + KMPSearch(pattern, text); + return 0; +} \ No newline at end of file -- Gitee From 59199bdb02c803711afadeea1ede8d2c3dd4321a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BF=A6=E5=8B=92?= <1330884793@qq.com> Date: Fri, 22 Dec 2023 06:31:09 +0000 Subject: [PATCH 5/8] =?UTF-8?q?=E7=AC=AC=E5=9B=9B=E7=AB=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\274\217\345\214\271\351\205\215\347\256\227\346\263\225.cpp" | 1 - 1 file changed, 1 deletion(-) diff --git "a/2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2303\357\274\232\345\256\236\347\216\260\351\241\272\345\272\217\344\270\262\347\232\204\345\220\204\347\247\215\346\250\241\345\274\217\345\214\271\351\205\215\347\256\227\346\263\225.cpp" "b/2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2303\357\274\232\345\256\236\347\216\260\351\241\272\345\272\217\344\270\262\347\232\204\345\220\204\347\247\215\346\250\241\345\274\217\345\214\271\351\205\215\347\256\227\346\263\225.cpp" index 160276d5..68eba795 100644 --- "a/2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2303\357\274\232\345\256\236\347\216\260\351\241\272\345\272\217\344\270\262\347\232\204\345\220\204\347\247\215\346\250\241\345\274\217\345\214\271\351\205\215\347\256\227\346\263\225.cpp" +++ "b/2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2303\357\274\232\345\256\236\347\216\260\351\241\272\345\272\217\344\270\262\347\232\204\345\220\204\347\247\215\346\250\241\345\274\217\345\214\271\351\205\215\347\256\227\346\263\225.cpp" @@ -50,7 +50,6 @@ void computeLPSArray(char pattern[], int M, int lps[]) { } } } - int main() { char pattern[] = "ABC"; char text[] = "XYZABCDEFG"; -- Gitee From 8ad2296513b37a1400102da8a47e48dc27cd4d71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BF=A6=E5=8B=92?= <1330884793@qq.com> Date: Fri, 22 Dec 2023 06:33:48 +0000 Subject: [PATCH 6/8] =?UTF-8?q?=E5=95=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...274\217\345\214\271\351\205\215\347\256\227\346\263\225.cpp" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2303\357\274\232\345\256\236\347\216\260\351\241\272\345\272\217\344\270\262\347\232\204\345\220\204\347\247\215\346\250\241\345\274\217\345\214\271\351\205\215\347\256\227\346\263\225.cpp" "b/2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2303\357\274\232\345\256\236\347\216\260\351\241\272\345\272\217\344\270\262\347\232\204\345\220\204\347\247\215\346\250\241\345\274\217\345\214\271\351\205\215\347\256\227\346\263\225.cpp" index 68eba795..b9366cb8 100644 --- "a/2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2303\357\274\232\345\256\236\347\216\260\351\241\272\345\272\217\344\270\262\347\232\204\345\220\204\347\247\215\346\250\241\345\274\217\345\214\271\351\205\215\347\256\227\346\263\225.cpp" +++ "b/2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2303\357\274\232\345\256\236\347\216\260\351\241\272\345\272\217\344\270\262\347\232\204\345\220\204\347\247\215\346\250\241\345\274\217\345\214\271\351\205\215\347\256\227\346\263\225.cpp" @@ -39,7 +39,7 @@ void computeLPSArray(char pattern[], int M, int lps[]) { i++; } lps[i] = lps[i - 1] + len; - } + else { if (lps[i - 1] != 0) { lps[i] = lps[lps[i - 1] - 1]; -- Gitee From 491ba1bfc662199d31af558a7d77e9c9afbfce9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BF=A6=E5=8B=92?= <1330884793@qq.com> Date: Fri, 22 Dec 2023 06:36:07 +0000 Subject: [PATCH 7/8] =?UTF-8?q?=E7=AC=AC=E5=9B=9B=E7=AB=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...5\345\244\215\345\255\220\344\270\262.cpp" | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git "a/2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2305\357\274\232\346\261\202\344\270\200\344\270\252\344\270\262\344\270\255\345\207\272\347\216\260\347\232\204\347\254\254\344\270\200\344\270\252\346\234\200\351\225\277\351\207\215\345\244\215\345\255\220\344\270\262.cpp" "b/2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2305\357\274\232\346\261\202\344\270\200\344\270\252\344\270\262\344\270\255\345\207\272\347\216\260\347\232\204\347\254\254\344\270\200\344\270\252\346\234\200\351\225\277\351\207\215\345\244\215\345\255\220\344\270\262.cpp" index e69de29b..c62b0633 100644 --- "a/2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2305\357\274\232\346\261\202\344\270\200\344\270\252\344\270\262\344\270\255\345\207\272\347\216\260\347\232\204\347\254\254\344\270\200\344\270\252\346\234\200\351\225\277\351\207\215\345\244\215\345\255\220\344\270\262.cpp" +++ "b/2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2305\357\274\232\346\261\202\344\270\200\344\270\252\344\270\262\344\270\255\345\207\272\347\216\260\347\232\204\347\254\254\344\270\200\344\270\252\346\234\200\351\225\277\351\207\215\345\244\215\345\255\220\344\270\262.cpp" @@ -0,0 +1,71 @@ +#include +#include +#include + +#define MAX_SIZE 100 + +typedef struct { + char data[MAX_SIZE]; + int length; +} SqString; + +static void destroy_str(SqString &s) { + // 释放内存 + free(s.data); +} + +static void str_assign(SqString &s, char cstr[]) { + int i; + s.length = strlen(cstr); + s.data = (char *)malloc(s.length + 1); // 为'\0'分配内存 + for (i = 0; i < s.length; i++) { + s.data[i] = cstr[i]; + } + s.data[s.length] = '\0'; // 添加字符串结束符 +} + +static void disp_str(SqString s) { + int i; + for (i = 0; i < s.length; i++) { + printf("%c", s.data[i]); + } + printf("\n"); +} + +static SqString *max_sub_str(SqString s) { + SqString *subs = NULL; + int length = 0; // 最长重复子串的长度 + int index = 0; // 最长重复子串的起始位置 + int i, j; + for (i = 0; i < s.length; i++) { + for (j = i + 1; j <= s.length; j++) { + if (s.data[i] == s.data[j] && j - i + 1 > length) { + length = j - i + 1; + index = i; + } + } + } + subs = (SqString *)malloc(sizeof(SqString)); + subs->length = length; + subs->data = (char *)malloc(length + 1); // 为'\0'分配内存 + for (i = 0; i < length; i++) { + subs->data[i] = s.data[index + i]; + } + subs->data[length] = '\0'; // 添加字符串结束符 + return subs; +} + +int main(int argc, char *argv[]) { + char str[MAX_SIZE]; + SqString s, *subs; + printf("输入串: "); + fgets(str, MAX_SIZE, stdin); // 从标准输入读取字符串,包括空格和换行符 + str_assign(s, str); // 将输入串赋值给SqString结构体变量s + subs = max_sub_str(s); // 寻找最长重复子串,将结果赋值给SqString结构体指针subs + printf("求最长重复子串:\n"); + printf(" 原串: "); + disp_str(s); // 显示原串s的内容 + printf(" 最长重复子串: "); // 显示最长重复子串的内容,但这里没有正确实现,因为subs->data指向的是s.data的一部分,而不是一个新的字符串。应该重新分配内存给subs->data。这个部分需要修复。 + free(subs); // 释放subs指向的内存,但由于上面的错误,这里实际上释放了原串的内存,这可能导致程序崩溃。应该改为free(subs->data);来释放子串的内存。这个部分需要修复。 + return 0; +} \ No newline at end of file -- Gitee From c6e94ffec58a47d663f62ca2c8e7e5c780b4c258 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BF=A6=E5=8B=92?= <1330884793@qq.com> Date: Fri, 22 Dec 2023 06:37:25 +0000 Subject: [PATCH 8/8] =?UTF-8?q?=E7=AC=AC=E5=9B=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\225\277\351\207\215\345\244\215\345\255\220\344\270\262.cpp" | 1 - 1 file changed, 1 deletion(-) diff --git "a/2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2305\357\274\232\346\261\202\344\270\200\344\270\252\344\270\262\344\270\255\345\207\272\347\216\260\347\232\204\347\254\254\344\270\200\344\270\252\346\234\200\351\225\277\351\207\215\345\244\215\345\255\220\344\270\262.cpp" "b/2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2305\357\274\232\346\261\202\344\270\200\344\270\252\344\270\262\344\270\255\345\207\272\347\216\260\347\232\204\347\254\254\344\270\200\344\270\252\346\234\200\351\225\277\351\207\215\345\244\215\345\255\220\344\270\262.cpp" index c62b0633..6eff824a 100644 --- "a/2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2305\357\274\232\346\261\202\344\270\200\344\270\252\344\270\262\344\270\255\345\207\272\347\216\260\347\232\204\347\254\254\344\270\200\344\270\252\346\234\200\351\225\277\351\207\215\345\244\215\345\255\220\344\270\262.cpp" +++ "b/2224020103/chap4/\344\270\212\346\234\272\345\256\236\351\252\214\351\242\2305\357\274\232\346\261\202\344\270\200\344\270\252\344\270\262\344\270\255\345\207\272\347\216\260\347\232\204\347\254\254\344\270\200\344\270\252\346\234\200\351\225\277\351\207\215\345\244\215\345\255\220\344\270\262.cpp" @@ -54,7 +54,6 @@ static SqString *max_sub_str(SqString s) { subs->data[length] = '\0'; // 添加字符串结束符 return subs; } - int main(int argc, char *argv[]) { char str[MAX_SIZE]; SqString s, *subs; -- Gitee