From ae6008c3065f1cb886cdb543dec2f9e717c5c87b Mon Sep 17 00:00:00 2001
From: Didnelpsun <2675350965@qq.com>
Date: Fri, 23 Apr 2021 23:17:50 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=B8=B2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Code/Code.vcxproj | 1 +
Code/link_string.h | 12 ++++++++
Code/sequence_string.h | 62 ++++++++++++++++++++++++++++++++++++++++
Data-Structrue/string.md | 41 +++++++++++++++++++++++++-
4 files changed, 115 insertions(+), 1 deletion(-)
create mode 100644 Code/link_string.h
create mode 100644 Code/sequence_string.h
diff --git a/Code/Code.vcxproj b/Code/Code.vcxproj
index fd762cf..91055f9 100644
--- a/Code/Code.vcxproj
+++ b/Code/Code.vcxproj
@@ -149,6 +149,7 @@
+
diff --git a/Code/link_string.h b/Code/link_string.h
new file mode 100644
index 0000000..2394ff9
--- /dev/null
+++ b/Code/link_string.h
@@ -0,0 +1,12 @@
+#include
+#include
+#include "head.h"
+
+// 链串
+typedef struct LinkStringNode {
+ // 每个结点存储一位数据
+ char data;
+ // 每个结点存储四位数据
+ //char data[4];
+ struct LinkStringNode* next;
+} LinkStringNode, *LinkString;
\ No newline at end of file
diff --git a/Code/sequence_string.h b/Code/sequence_string.h
new file mode 100644
index 0000000..8ce2517
--- /dev/null
+++ b/Code/sequence_string.h
@@ -0,0 +1,62 @@
+#include
+#include
+#include "head.h"
+
+// 静态顺序串
+typedef struct {
+ char data[MAXSIZE];
+ // 串长
+ int length;
+} StaticSequenceString;
+
+// 动态顺序串
+typedef struct {
+ char* data;
+ int length;
+} DynamicSequenceString;
+
+// 求静态顺序子串
+int SubStaticSequenceString(StaticSequenceString string, StaticSequenceString *substring, int index, int length) {
+ // 如果子串越界
+ if (index + length > string.length) {
+ printf("StaticSequenceString:子串范围越界!");
+ return 1;
+ }
+ for (int i = 0; i < length; i++) {
+ substring->data[i] = string.data[index + i];
+ }
+ substring->length = length;
+ return 0;
+}
+
+// 对比静态顺序字符串
+int CompareStaticSequenceString(StaticSequenceString string1, StaticSequenceString string2) {
+ for (int i = 0; i <= string1.length && i <= string2.length; i++) {
+ if (string1.data[i] != string2.data[i]) {
+ return string1.data[i] - string2.data[i];
+ }
+ }
+ // 如果扫描过的所有字符都相同,则长度长的字符串更长
+ return string1.length - string2.length;
+}
+
+// 在静态顺序字符串中定位子串
+// 如果主串中存在与子串相同的子串,则返回在主串中第一次出现的位置,否则返回-1
+int LocateStaticSequenceString(StaticSequenceString mainstring, StaticSequenceString substring) {
+ int i = 0;
+ // 用于暂存子串
+ StaticSequenceString temp;
+ while (i < mainstring.length - substring.length + 1) {
+ // 从主串切割下来与子串相同长度的子串
+ SubStaticSequenceString(mainstring, &temp, i, substring.length);
+ // 如果切割下来的子串与子串不相等就后移一位再切割子串
+ if (CompareStaticSequenceString(substring, temp) != 0) {
+ i++;
+ }
+ // 否则返回当前的索引
+ else {
+ return i;
+ }
+ }
+ return -1;
+}
\ No newline at end of file
diff --git a/Data-Structrue/string.md b/Data-Structrue/string.md
index f39dc51..04bb7cb 100644
--- a/Data-Structrue/string.md
+++ b/Data-Structrue/string.md
@@ -1,7 +1,46 @@
# 涓
+## 鍩烘湰姒傚康
+
+ 涓诧細闆朵釜鎴栧涓瓧绗︾粍鎴愮殑鏈夐檺搴忓垪銆
++ 瀛愪覆锛氫覆涓换鎰忎釜杩炵画鐨勫瓧绗︾粍鎴愮殑瀛愬簭鍒椼
+ 绌轰覆锛氶暱搴︿负闆剁殑涓层
-+ 绌虹櫧涓诧細浠呯敱涓涓垨澶氫釜绌烘牸缁勬垚鐨勪覆銆
++ 绌虹櫧涓诧紙绌烘牸涓诧級锛氫粎鐢变竴涓垨澶氫釜绌烘牸缁勬垚鐨勪覆銆
+ 绌轰覆鏄换鎰忎覆鐨勫瓙涓诧紝浠绘剰涓叉槸鍏惰嚜韬殑瀛愪覆銆
+涓茬殑鍩烘湰鎿嶄綔鏄瀛愪覆鐨勬搷浣溿
+
+## 椤哄簭涓
+
+椤哄簭涓茬殑缁撴瀯瀹氫箟鏂规
+
++ 浣跨敤鍗曠嫭鐨勫彉閲弆ength淇濆瓨涓查暱銆
++ 浣跨敤data[0]璁板綍涓查暱锛涗娇寰楀瓧绗︿綅搴忎笌鏁扮粍涓嬫爣涓鑷达紱浣嗘槸鐢变簬char绫诲瀷涓涓负涓瀛楄妭澶у皬锛屾墍浠ヨ兘琛ㄧず鐨勬暟瀛楁槸0鍒255锛屽お澶х殑涓叉棤娉曡〃绀恒
++ 娌℃湁琛ㄧず涓查暱鐨勫彉閲忥紝浣跨敤\0琛ㄧず涓茬粨灏撅紝瀵瑰簲ASCII鐮佺殑0鍙峰瓧绗︺
+
+## 閾句覆
+
+濡備竴鑸殑閾惧紡瀛樺偍缁撴瀯瀹氫箟涓鏍凤紝瀹氫箟涓涓暟鎹笌鎸囧悜涓嬩竴浣嶇殑鎸囬拡銆
+
+浣嗘槸濡傛灉浣犲彧鍦ㄦ瘡涓粨鐐瑰畾涔変簡涓涓瓧鑺傜殑鏁版嵁锛屼絾鏄張鍖呭惈浜嗗洓涓瓧鑺傜殑鎸囬拡锛岄偅涔堝瓨鍌ㄥ埄鐢ㄧ巼浼氬緢浣庛
+
+濡傛灉鏄『搴忚〃鏁版嵁绫诲瀷鏄暣鏁扮被鍨嬶紝閭d箞杩欑鍒╃敤鐜囦綆鐨勬儏鍐电‘瀹炴棤鍙浣曪紝浣嗘槸瀵逛簬涓茶岃█锛屽洜涓轰竴涓瓧鑺傚瓨鍌ㄤ竴涓瓧绗︼紝鎵浠ヨ兘涓涓瓧鑺傚瓨涓涓瓧绗︾被鍨嬫暟鎹紝鎵浠ヤ负浜嗘彁鍗囨暟鎹瓨鍌ㄥ埄鐢ㄧ巼锛屽彲浠ユ瘡涓粨鐐瑰瓨绛夊涓瓧绗︺
+
+## 妯″紡鍖归厤
+
+妯″紡鍖归厤鎸囧湪涓讳覆涓壘鍒颁笌妯″紡涓茬浉鍚岀殑瀛愪覆骞惰繑鍥炲叾鎵鍦ㄤ綅缃
+
+### 鏈寸礌妯″紡鍖归厤绠楁硶
+
+浠庝富涓层佹ā寮忎覆锛堝瓙涓诧級鐨勭涓涓綅缃紑濮嬫瘮杈冿紙i=0,j=0锛夛紝鑻ョ浉绛夛紝鍒 i锛宩 鍚勮嚜+1锛岀劧鍚庢瘮杈冧笅涓涓瓧绗︺傝嫢涓嶇瓑锛屼富涓叉寚閽堝洖婧埌涓婁竴杞瘮杈冧綅缃殑涓嬩竴涓綅缃紝瀛愪覆鍥炴函鍒0锛屽啀杩涜涓嬩竴娆℃瘮杈冦備护瀛愪覆闀垮害涓簃锛屼富涓查暱搴︿负n锛
+
++ 鍖归厤鎴愬姛鐨勬渶濂芥椂闂村鏉傚害锛$O(m)$锛氬垰濂界涓涓氨鍖归厤涓婁簡锛屾诲姣旀鏁颁负瀛愪覆闀垮害銆
++ 鍖归厤澶辫触鐨勬渶濂芥椂闂村鏉傚害锛$O(n-m+1)=O(n-m)=O(n)$锛氬尮閰嶆垚鍔熶箣鍓嶏紝姣忎竴涓笌绗竴涓瓧绗﹂兘鍖归厤澶辫触銆
++ 鍖归厤澶辫触鐨勬渶鍧忔椂闂村鏉傚害锛$O(nm-m^2+m)= O(nm)$锛氬瓙涓查櫎浜嗘渶鍚庝竴涓涓嶄笂锛屽叾浣欑殑閮借兘瀵逛笂锛屽垯姣忔閬嶅巻瀹屼竴杈瑰悗锛屽張瑕佽蛋鍥炲ご璺紱鐩村埌鍖归厤鎴愬姛/澶辫触涓鍏遍渶瑕佹瘮杈$m*(n-m+1)$娆°俶锛氭瘡娆¢渶瑕佺Щ鍔╩娆★紝i闇瑕佺Щ鍔$n-m+1$娆°
+
+### KMP绠楁硶
+
+KMP绠楁硶鏄鏈寸礌妯″紡鍖归厤绠楁硶鐨勪紭鍖栥
+
+涓昏鎬濇兂鏄け閰嶆椂锛屽彧鏈夋ā寮忎覆鎸囬拡鍥炴函锛屼富涓叉寚閽堜笉鍙樸
+