算法导论的一道课后练习题
这个题目的题意是这样的:
高僧驱蚊记
高中时同桌乃一词坛怪才,其创作的打油诗雅俗共赏,琅琅上口,在我们班内广为流传,众女生无不对其倾慕有加,令我等粗俗之人甚为羡慕,遂拜其为师,欲学打油诗创作之精髓,无奈鄙人天资愚钝,到毕业时尚未有所成就,虽创作不少,然而水平着实不高,唯一一首得到过师傅首肯的小诗,到现在也记得不清楚了,一番冥思苦想加改编后拿出来献丑,博君一笑 。
1
高僧驱蚊记
某知名存储公司的几道面试题目
这是从网上看到的某知名存储公司的面试题目,我觉得题目设计的不错,贴上来供参考。
KMP+QuickSort+BinarySearch三件套,面试必备
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++;
}
}
}