lamda表达式

Definition

这个题目的题意是这样的:

高中时同桌乃一词坛怪才,其创作的打油诗雅俗共赏,琅琅上口,在我们班内广为流传,众女生无不对其倾慕有加,令我等粗俗之人甚为羡慕,遂拜其为师,欲学打油诗创作之精髓,无奈鄙人天资愚钝,到毕业时尚未有所成就,虽创作不少,然而水平着实不高,唯一一首得到过师傅首肯的小诗,到现在也记得不清楚了,一番冥思苦想加改编后拿出来献丑,博君一笑 。

1
                             高僧驱蚊记

这是从网上看到的某知名存储公司的面试题目,我觉得题目设计的不错,贴上来供参考。

KMP实现

void preKMP_CLRS(char *P){
    int j, k;
    int pLen = strlen(P);
 
    next[0] = 0;
    for(j=1; j<pLen; j++){
        k = next[j-1];
        while(k > 0 && P[j] != P[k])
            k = next[k-1];        //下标从0开始,所以长度 = 下标 +1
        if(P[j] == P[k])
            k++;
        next[j] = k;
    }
}
 
 
int KMP_CLRS(char *T, char *P, int start){
    int i, j;
    int tLen = strlen(T);
    int pLen = strlen(P);
 
    j = 0;
    for(i=start; i<tLen; i++){
        while(j > 0 && T[i] != P[j]){
            j = next[j-1];
        }
        if(T[i] == P[j])
            j++;
        if(j == pLen)
            return i - j + 1;
    }
    return -1;
}
 
//找所有子串
void KMP_CLRS_2(char *T, char *P, int start){
    int i, j;
    int tLen = strlen(T);
    int pLen = strlen(P);
 
    j = 0;
    for(i=start; i<tLen; i++){
        while(j > 0 && T[i] != P[j]){
            j = next[j-1];
        }
        if(T[i] == P[j]){
            if(j == pLen - 1){
                cout << i - j << endl;
                j = next[j];
                j--;        //注意:长度 = 下标 + 1
            }
            j++;
        }
    }
}