zoukankan      html  css  js  c++  java
  • BF + KMP + BM 字符串搜索算法

    BF

    #include <stdio.h>
    #include <string.h>
    
    int simplicity(char *s, char *t, int pos);
    
    int simplicity(char *s, char *t, int pos)
    {
    	int slen = strlen(s);
    	int tlen = strlen(t);
    	
    	int i = pos;
    	int j = 0;
    
    	while(i < slen && j < tlen) {
    		if(s[i] == t[j]) {
    			i++;
    			j++;
    		} else {
    			i = i - j + 1;
    			j = 0;
    		}
    	}
    
    	// subscripts start at 0 : j == len
    	// subscripts start at 1 : j > len
    	if(j == tlen) {
    		return i - j;
    	}
    
    	return -1;
    }
    
    int main()
    {
    	int pos = 0;
    	char *s = "goodgoogle";
    	char *t = "goog";
    
    	printf("{s:'%s', t:'%s', pos:'%d', result(subsripts start at 0):'%d'}
    ", s, t, pos, simplicity(s, t, pos));
    	return 0;
    }
    

     KMP

    #include <stdio.h>
    #include <string.h>
    
    void get_nextSubscripts(char *t, int *next);
    int kmp(char * s, char *t, int pos);
    
    void get_nextSubscripts(char *t, int *next)
    {
    	int tlen = strlen(t);
    
    	int i = 0; // suffix
    	int j = -1; // prefix
    
    	next[0] = -1;
    
    	while(i <= tlen) {
    		if(j == -1 || t[i] == t[j]) {
    			i++;
    			j++;
    
    			if(t[i] == t[j]) {
    				next[i] = next[j];
    			} else {
    				next[i] = j;
    			}
    		} else {
    			j = next[j];
    		}
    	}
    }
    
    int kmp(char *s, char *t, int pos)
    {
    	int next[255];
    	int slen = strlen(s);
    	int tlen = strlen(t);
    
    	int i = pos;
    	int j = -1;
    
    	get_nextSubscripts(t, next);
    
    	while(i < slen && j < tlen) {
    		if(j == -1 || s[i] == t[j]) {
    			i++;
    			j++;
    		} else {
    			j = next[j];	
    		}
    	}
    
    	if(j == tlen) {
    		return i - j;
    	}
    
    	return -1;
    }
    
    int main()
    {
    	int pos = 0;
    	char *s = "goodgoogle";
    	char *t = "goog";
    
    	printf("{s:'%s', t:'%s', pos:'%d', result(subsripts start at 0):'%d'}
    ", s, t, pos, kmp(s, t, pos));
    
    	return 0;
    }
    

    BM

  • 相关阅读:
    房地产英语 Real estate词汇
    自制Flash FLV视频播放器
    .net反编译工具Reflector下载
    JQUery插件thickbox
    50 Great Photoshop Tutorials for Clever Beginners
    AspNet中你或许不知道的技巧(转)
    常用的设计网站(收藏)
    35 Green and Earthy Photoshop Effects
    使用 ASP.NET 2.0 增强网站的安全性
    asp.net中实现登陆的时候用SSL
  • 原文地址:https://www.cnblogs.com/hfultrastrong/p/7581848.html
Copyright © 2011-2022 走看看