字串資料結構模板

2022-05-16 05:06:20 字數 2806 閱讀 4246

trie 樹

字典樹,用於儲存和查詢數量較大的字串。

1 #include 2 #include 3 #include 4

#define maxn 500010

5using

namespace

std;

6char aa[51];7

8struct

trie

13int idx(char x)

14void insert(char *s)

24 u=ch[u][c];25}

26 val[u]=1;27

}28void check(char *s)

34 u=ch[u][c];35}

36if(val[u]==1)

37else

if(val[u]>1) cout<<"

repeat\n";

38else cout<<"

wrong\n";

39return;40

}41}trie;

4243

intmain()

50 cin>>n;

51for (int i=1;i<=n;i++)

55return0;

56 }

例題:洛谷p2580

kmp演算法

支援單個模式串匹配。

思想:用自己匹配自己。核心是next陣列。

1 #include 2 #include 3 #include 4 #include 

5using

namespace

std;

6string

s1, s2;

7int

len1, len2;

8int next[1001];9

10void

next_init()

18return;19

}2021void

kmp()

31return;32

}3334int

main()

例題:洛谷p3375

ac自動機

支援多模式串匹配。

思想:trie樹+kmp演算法;也可以看做模式串有多個的kmp演算法在trie樹上的實現。

1 #include 2 #include 3 #include 4 #include 5

using

namespace

std;

6const

int maxn 50010

7int

tot, n;

8char s[50];9

10struct

trie

16int idx(char x)

1718

void insert(char *s)

27 u=ch[u][c];28}

29 val[u]=++tot;

30return;31

}3233void

getfail() 43}

44while (!q.empty()) 56}

57return;58

}5960void find(char *t)

70return;71

}

72}trie;

7374

75void print(int i, int

j)

manacher

最長回文串的計算。

核心思想是把已經計算過的回文部分「抄過來」。

1 #include 2 #include 3 #include 

4using

namespace

std;56

string

a, a1;

7int lena, p[100010];8

int maxn=0;9

10int max(int x, int y)

11int min(int x, int y)

1213

void

manacher() 24}

25for (int i=1; i<=lena; i++)

26 maxn=max(maxn,p[i]);

27 maxn--;

28return;29

}3031int

main()

39 lena<<=1;40

manacher();

41 cout<42return0;

43 }

字串hash

不屬於資料結構,但由於也與字串有關,也放在這裡。

使用bkdrhash和aphash

1 #include 2 #include 3 #include 4

using

namespace

std;

56 unsigned int bkdrhash(char *str)

1314

15int

aphash1()

**出處 bkdrhash & aphash1 

aphash2

資料結構模板 棧

此部落格是存的是我自己編寫的棧模板,如有錯誤請指出棧是操作受限的線性表,只允許在棧頂進行插入和刪除操作,遵循 後進先出 原則。include include define elemtype int define maxsize 1000 using namespace std 這是順序棧的模板 ty...

資料結構模板 佇列

此部落格是存的是我自己編寫的佇列模板,如有錯誤請指出佇列是操作受限的線性表,只允許在隊頭進行刪除操作,在隊尾進行插入操作,遵循 先進先出 原則。順序隊 存在假溢位問題 include include define elemtype int define maxsize 1000 using name...

資料結構模板合集

線段樹lazy操作模板 區間修改,區間查詢 class segment tree lazy inline void add int p,int v,int t inline void pushdown int p,int l,int r public inline void build tree i...