两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

在學(xué)習(xí)和了解序列自動機前,我們要熟悉自動機,“自動機”一般都指“確定有限狀態(tài)自動機”。自動機是計算機科學(xué)中被廣泛使用的一個數(shù)學(xué)模型,其思想在許多字符串算法中都有涉及,因此推薦在學(xué)習(xí)一些字符串算法(KMP、AC 自動機、SAM)前先完成自動機的學(xué)習(xí)。學(xué)習(xí)自動機有助于理解上述算法。

在這就不詳細(xì)重復(fù)說明自動機了,接下來就是序列自動機的內(nèi)容。

序列自動機是一個可以快速判斷字符串t是否是字符串s的子串的一個算法。使用空間復(fù)雜度來換取時間復(fù)雜度。


構(gòu)造

對字符串s構(gòu)造序列自動機,使用nxt數(shù)組。nxt[i][j]代表從第i個位置開始,字符j出現(xiàn)的第一個位置。我們倒著遍歷更新即可。

    int nxt[N][27];
    void init(char *s){
        int l=strlen(s);
        for(int i=0;i<26;i++) 
            nxt[l][i]=INF;//初始化
        for(int i=l-1;i>=0;i--){
            for(int j=0;j<26;j++){
                nxt[i][j]=nxt[i+1][j];
            }
            nxt[i][s[i]-'a']=i;//apple nxt[4]['e'-'a']=4
        }
    }

查詢

設(shè)置初始指針p為-1,每次讓p跳到nxt[p+1][j]上面,j為當(dāng)前查詢的字符,如果p為INF,則說明找不到下一個字符,即t不是s的子串。

bool find(char *t){
        int pos=-1;
        int l=strlen(t);
        for(int i=0;i<l;i++){
            pos=nxt[pos+1][t[i]-'a'];
            if(pos==INF) return 0;
        }
        return 1;
}


點贊(0)

C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:

一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程

解決困擾你多年的C語言疑難雜癥特性的C語言進階課程

從零到寫出一個爬蟲的Python編程課程

只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程

信息學(xué)奧賽或C++選手的 必學(xué)C++課程

藍橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程

手把手講解近五年真題的藍橋杯輔導(dǎo)課程

Dotcpp在線編譯      (登錄可減少運行等待時間)