蒟蒻的提高組複習——字串
阿新 • • 發佈:2021-08-11
字串
1.字串基礎
型別
- 字符集
- 字串
- 子串
- 子序列
- 字首
- 字尾
- 字典序
- 迴文串
儲存
- char
- string
2.字串匹配
簡介
又稱模式匹配(pattern matching)。該問題可以概括為「給定字串\(S\)和\(T\) ,在主串\(S\)中尋找子串\(T\)」。字元\(T\)稱為模式串 (pattern)。
型別
單串匹配:給定一個模式串和一個待匹配串,找出前者在後者中的所有位置。
多串匹配:給定多個模式串和一個待匹配串,找出這些模式串在後者中的所有位置。
出現多個待匹配串時,將它們直接連起來便可作為一個待匹配串處理。
可以直接當做單串匹配,但是效率不夠高。
其他型別:例如匹配一個串的任意字尾,匹配多個串的任意字尾……
1.暴力
char s[maxn],t[maxn];//
int slen=strlen(s),tlen=strlen(t);
int i,j;
for(i=0;i<slen-tlen+1;i++)
for(j=0;j<tlen;j++)
if(s[i+j]!=t[j]) break;
if(j==tlen) puts("Yes");
2.hash
此處省略一萬字
3.字典樹(trie)
字典樹,就是定義一個26叉樹,每個節點的權為1(有'\(a\)'+i-1)或0(無)
inline void build(char a[]) { int k=1,l=strlen(a); for(int i=0;i<l;i++) { int id=a[i]-'A'+1; if(!f[k].nxt[id]) f[k].nxt[id]=++sz; k=f[k].nxt[id]; } }