1. 程式人生 > 其它 >蒟蒻的提高組複習——字串

蒟蒻的提高組複習——字串

字串


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];
	}
}

4.kmp