ITSA [C_ST42-易] 子字串出現(xiàn)次數(shù)

Problem

http://e-tutor.itsa.org.tw/e-Tutor/mod/programming/view.php?a=1376

Thinking

使用 KMP algo 去算匹配成功的次數(shù), 至於KMP algo是什麼以我的功力目前還沒辦法解釋很清楚, 請google看高手解答

Solution

#include<iostream>  
  
using namespace std;  
// KMP algo  
void next(string p, int *f){  
    f[0] = -1;  
    int j = -1;  
    for(int i = 1 ; i < p.length() ; i++){  
        while(j >= 0 && p[j + 1] != p[i])  
            j = f[j];  
          
        if(p[j + 1] == p[i])  
            j++;  
          
        f[i] = j;  
    }  
}  
int match(string T,string P, int *f){  
    int j = -1;  
    int matchNum = 0;  
      
    for(int i = 0 ; i < T.length() ; i++){  
        while(j >= 0 && P[j + 1] != T[i])  
            j = f[j];  
          
        if(P[j + 1] == T[i])  
            j++;  
          
        if(j == P.length() -1 ){  
            matchNum++;  
            j = f[j];  
        }  
    }  
    return matchNum;  
}  
int main(){  
    string T,P;  
      
    while(cin >> P >> T){  
        int *f = new int[P.length()];  
        f[0] = -1;  
        next(P,f);  
        cout << match(T, P, f) << endl;  
    }  
}  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 為何叫做 shell ? shell prompt(PS1) 與 Carriage Return(CR) 的關(guān)系?...
    Zero___閱讀 3,347評論 3 49
  • Problem http://e-tutor.itsa.org.tw/e-Tutor/mod/programmin...
    iamkai閱讀 517評論 0 0
  • 隨筆1-24(2015.6-10) 1、作者 才華不是財富,痛苦不是財富,用才華對痛苦進(jìn)行思考和表達(dá)才是。於是有了...
    四葉閱讀 1,663評論 3 14
  • 滿檔的周末,這才是生活嘛。 在屋頂,汗水伴隨微風(fēng)輕拂的美妙,內(nèi)心存一絲平靜。 溫水順著喉嚨流入,總有一首歌可以到達(dá)...
    小卡星球閱讀 304評論 0 0
  • 如果你獨自駕車環(huán)繞世界旅行,如果你只能帶一樣?xùn)|西供自己娛樂,你會選擇哪一樣?一副美麗的圖畫,一本有趣的書,一盒撲克...
    hchhcx閱讀 268評論 0 0

友情鏈接更多精彩內(nèi)容