字串專題 KMP POJ 3561

2022-08-02 10:18:12 字數 1376 閱讀 1290

kmp這裡講的不錯next的求法值得借鑑 

這道題要用到kmp,基於鄺斌牌模板,複雜度o(m+n)

一開始t了,用了字尾陣列,複雜度o(nlog2n)

#include#include

#include

#include

#include

using

namespace

std;

#define n 100010

char s[n * 10

], p[n];

/** next的含義:x[i-next[i]...i-1]=x[0...next[i]-1]

* next[i]為滿足x[i-z...i-1]=x[0...z-1]的最大z值(就是x的自身匹配)

*/void kmp_pre(char x,int m,int

next)}/*

* kmpnext的意思:next'[i]=next[next[...[next[i]]]] (直到next'[i]<0或者x[next'[i]]!=x[i])

* 這樣的預處理可以快一些

*//*

void prekmp(char x,int m,int kmpnext)

}return

ans;

}int

main()

return0;

}

#include#include

#include

#include

#include

using

namespace

std;

intn,k,m,number;

int rank[1000005],tmp[1000005],sa[1000005

];bool common_sa(int i,intj)}

void construct_sa(string s,int *sa)

for(k=1;k<=m;k*=2) //

這裡的k是遞迴到長度為k的串

for(int i=0;i<=n;i++)

}}bool contain(string s,int *sa,string

t)

return s.compare(sa[b],t.length(),t)==0;}

intmain()

break

; }

}cout}}

return0;

}

t掉的 字尾陣列

字尾陣列這裡也有值得說的

rank陣列對字串長度做1 2 4 8這樣的增長式劃分,劃分的最大長度可以直接定為匹配串的長度,

這樣根據rank陣列的值和位置就能知道相同的串個數了。

字串專題

created on 2019年12月1日 author hp 擷取字串 str2 我是迪迦奧特曼 str3 str2 5 str4 str2 0 len str2 2 print str3,str4 擷取的字串如果不存在,會出現異常,可以用try.except捕捉異常 try str5 str2 ...

字串專題

給定乙個字串,你的任務是計算這個字串中有多少個回文子串。具有不同開始位置或結束位置的子串,即使是由相同的字元組成,也會被視作不同的子串。示例1 輸入 abc 輸出 3 解釋 三個回文子串 a b c 示例 2 輸入 aaa 輸出 6 解釋 6個回文子串 a a a aa aa aaa 解法 1 動態...

字串專題

1.double ceil double x 求大於 x 的最小的數,即向上取整函式 includeusing namespace std intmain 2.a 65 z 90 a 97 z 122 3.字串刪除 c 從string中刪除所有的某個特定字元 超好 includeusing name...