字串匹配(字尾陣列)
假設已經求出字串S的字尾陣列點選開啟連結,現在要求字串T在字串S中出現的位置,只要通過二分搜尋就可以在O(T*logS)時間內完成。當S比較大時,比O(T+S)的演算法更為高效,所以需要對同樣的字串做多次匹配時,該演算法更有優勢。
程式碼:
bool contain(string S,int *sa,string T) { int a=0,b=S.length(); while(b-a>1) { int c=(a+b)/2; //比較S從位置sa[c]開始長度為T的子串與T if(S.compare(sa[c],T.length(),T)<0) a=c; else b=c; } return S.compare(sa[b],T.length(),T)==0; }
相關推薦
字串匹配(字尾陣列)
假設已經求出字串S的字尾陣列點選開啟連結,現在要求字串T在字串S中出現的位置,只要通過二分搜尋就可以在O(T*logS)時間內完成。當S比較大時,比O(T+S)的演算法更為高效,所以需要對同樣的字串做
尋找一個字串中的最長重複子串(字尾陣列)&找出一個字串中最長不重複子串
一、尋找一個字串中的最長重複子串(字尾陣列) 字尾陣列其實可以看尋找一個字串中的最長重複子串(字尾陣列)作一個由字串s倒數i個字元組成的子串的集合,其中0<i<s.length(),例如 字串strstr的字尾陣列為: {r,tr,str,rstr,trstr,
SPOJ-694-求字串中不同子串個數(字尾陣列)
http://www.spoj.com/status/ns=17418952 【每一個子串必然是某個字尾的字首】,因此我們統計出所有的字尾中有多少個不同的字首,就是所有不重複子串的數量了 而這個相同的字首個數,當然就是所有height之和啦。 所以答案就是n*(n-1)/
BZOJ3238: [Ahoi2013]差異(字尾陣列)
Description Input 一行,一個字串S Output 一行,一個整數,表示所求值 Sample Input cacao Sample Output 54 解題思路: 看到lcp,想到了height陣列,沒錯,這道題是一道字尾陣列
2018.11.24 poj3261Milk Patterns(字尾陣列)
傳送門 字尾陣列經典題。 貌似可以用二分答案+字尾陣列? 我自己 y y yy
2018.11.24 poj3693Maximum repetition substring(字尾陣列)
傳送門 字尾陣列好題。 考慮列舉迴圈節長度 l e n
2018.11.24 loj#111. 字尾排序(字尾陣列)
傳送門 字尾排序模板題。 終於會後綴陣列了(然而只會倍增並不會 D C 3
2018.11.30 bzoj3230: 相似子串(字尾陣列)
傳送門 字尾陣列入門題。 建立正反兩個字尾陣列算就行了。 程式碼: #include<bits/stdc++.h> #define ri register int using namespace std; typedef long long ll; const int N
2018.11.24 poj2774Long Long Message(字尾陣列)
傳送門 實際上可以用字尾自動機秒掉 當然字尾陣列也挺好寫。 我們將兩個字串接在一起,為了方便中間用一個特殊字元連線。 然後對新字串求 h e
2018.11.24 spoj New Distinct Substrings(字尾陣列)
傳送門 雙倍經驗(弱化版本) 考慮求出來 h e i
Atitit 演算法原理與導論 目錄 1. Attilax總結的有用演算法 按用途分類 1 1.1. 排序演算法 字串匹配(String Matching) 1 1.2. 加密演算法 編碼演算法 序列
Atitit 演算法原理與導論 目錄 1. Attilax總結的有用演算法 按用途分類 1 1.1. 排序演算法 字串匹配(String Matching) 1 1.2. 加密演算法 編碼演算法 序列化演算法 1 1.3. 查
VOJ 字元加密Cipher (字尾陣列)
字元加密Cipher 題意 給你一個長度為N的字串,讓你輸出一個字串,要求,這個字串是原字串迴圈(即每次將第一個字元移至最後一個位置),總共會用N個這樣的字串,然後將這些字串按照字典序排列,按照順序每次輸出這些串的最後一個字元,這樣就形成了一個加密過的字串。
New Distinct Substrings(字尾陣列)
題意 給定一個串,求其不同子串的個數。 題解 又見字尾陣列鬼題,資料範圍1e3的程式碼跑到5e4的就過不了了,gg。 題解詳見羅穗騫奆神的論文《字尾陣列——處理字串的有力工具》, “每個子串一定是某個字尾的字首,那麼原問題等價於求所有後綴之間的不相同的字首的個數
UVa10340 字串匹配(水題)
又切了一個水題,最近一直切水題。。。我也沒辦法啊,不是水題不會寫。 本題就是字串的匹配問題。 給定字串s,t,如果s是t的subsequence,那麼輸出Yes,否則輸出No。 先輸入這兩個字串,我開始忘記寫scanf("%s%s",s,t) == 2了,然後報了TLE
2018.12.01【SPOJ220】Relevant Phrases of Annihilation(字尾陣列)(二分答案)
傳送門 解析: 套路題。 首先串成一串求一下SA。 然後按照二分出的 l e n
208.11.30【SPOJ694/705】New Distinct Substrings(字尾陣列)
SPOJ694傳送門 SPOJ705傳送門 解析: 字尾陣列水題。 思路: 考慮每個字尾有多少個字首是沒有出現過的。 那麼答案顯然是 ∑
poj-2774(字尾陣列)
poj-2774 Long Long Message 題目: The little cat is majoring in physics in the capital of Byterland. A piece of sad news comes to hi
poj 2406 Power Strings (字尾陣列)
Power Strings Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 45998 Accepted: 19230 Description Given two strings a and
POJ2406——Power Strings(字尾陣列)
Power Strings Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 51218 Accepted: 21386 Description Given two strings a an
Long Long Message (字尾陣列)
The little cat is majoring in physics in the capital of Byterland. A piece of sad news comes to him these days: his mother is getting ill. Being worri