判断一个字符串中是否包含另一个字符串(KMP、BF)
判断一个字符串是否是另一个字符串的子串,也就是strstr()函数的实现,简单的实现方法是BF算法。
1.BF算法
int BF(char *s, char *p){
if(s==NULL || p==NULL)return -;
int i=;
int j;
while(i<strlen(s)){
j=;
while(s[i]==p[j] && j<strlen(p)){
i++;
j++;
}
if(j==strlen(p))return i-j;
i=i-j+;
}
return -;
}
2.KMP算法
KMP算法的原理有很多文章解释,这就不说了(我也看得不是很懂......)。整个KMP算法的关键点在于next数组的实现。
KMP算法主体:
int KMP(char *s, char *p){
if(s==NULL || p==NULL)return -;
int next[];
get_next(next, p);
int i=;
int j=;
while(i<strlen(s)){
if(j==- || s[i]==p[j]){
i++;
j++;
}else{
j=next[j];
}
if(j==strlen(p))return i-j;
}
return -;
}
get_next函数的实现:
void get_next(int *next, char *p){
if(next==NULL || p=NULL)return;
int i=;
int j=-;
next[]=-;
while(i<strlen(p)-){
if(j==- || p[i]==p[j]){
i++;
j++;
next[i]=j;
}elseP{
j=next[j];
}
}
}
注意,get_next函数的实现只与子字符串有关系...
判断一个字符串中是否包含另一个字符串(KMP、BF)的更多相关文章
- php字符串查找函数 php查找字符串中出现的次数函数substr_count,判断字符串中是否包含另一个字符串函数strpos
php字符串查找函数 php查找字符串中出现的次数函数substr_count,判断字符串中是否包含另一个字符串函数strpossubstr_count($haystack, $needle [,$o ...
- 在SQLSERVER中如何检测一个字符串中是否包含另一个字符串
--当charindex返回值大于0时则包含 为0不包含 select CHARINDEX('456','123456') SQL语句使用CHARINDEX函数,来测试一个字符串中是否包含另一个字 ...
- 在sql server中如何检测一个字符串中是否包含另一个字符串
select CHARINDEX('456','123456') SQL语句使用CHARINDEX函数,来测试一个字符串中是否包含另一个字符串中的方法: 一.CHARINDEX函数介绍 1.函数功 ...
- C#判断字符串中是否包含一个子字符串是可以直接使用Contains()方法
1. 以前判断一个字符串中是否包含另一个子字符串时,习惯使用 IndexOf(); string str = "ABC@QQ"; if(str.IndexOf("@&qu ...
- php 判断字符串中是否包含另一个字符串 strpos
strpos (PHP 4, PHP 5, PHP 7) strpos — 查找字符串首次出现的位置 说明 strpos ( string $haystack , $needle [, int $o ...
- js判断一个dom中是否包含另一个dom的方法
首先,比较原始(蠢)的方法 function isChildOf(child, parent) { if(child && parent) { let parentNode = chi ...
- oracle判断一个字符串中是否包含另外一个字符串
select * from a where instr(a,b)>0; 用于实现B字段是A字段中的某一部分的时候,要论顺序或者要相邻的字符. 如果想要不论顺序或者不相邻的字符时,定义函数可以实现 ...
- C# 如何判断字符串中是否包含另一个字符串?
如 字符串1(str1)为:“你好怎么解决呢!” 字符串2(str2)为:“你好” 如果str1里面包str2 则 Response.Write("成功");否则 Resp ...
- 用JAVA写查询一个字符串中是否包含另外一个字符串以及出现的次数
package JAVA; import java.awt.List;import java.util.ArrayList;/** * * @author 梁小鱼 * */public class ...
随机推荐
- Elevator(hdoj 1008)
Problem Description The highest building in our city has only one elevator. A request list is made u ...
- 一个Java项目的学习
1. java命令行的启动 首先是gradle build 其次是:java -Dabc.appid=1234 -classpath "a.jar:b.jar" com.ctri ...
- MYSQL 查看当前用户与数据库版本
问题一: 查看当前用户 select user(); 问题二: 查看数据库版本 select version();
- 一张图片入门Python
一张图片入门Python 之前已有别人整理了,一张图入门Python,快速了解各种基本的语法. 英文版: 图 5.1. Quick Python Script Explanation 中文版: 图 5 ...
- mfc窗口,父窗口parentwindow,所有者窗口ownerwindow 区别
一. parent:创建者,owner:所有者 小玉的父母生下小玉,养到8岁,卖给贾府当丫头小玉的父母是parent,贾府是owner 二. 1.Pop-up窗口: 一个弹出窗口是必须具有WS_POP ...
- OSCHina技术导向:Java模板引擎velocity
OSChina 采用 velocity 作为页面模板 Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template langua ...
- 轻量级交互数据json格式初探
[w3cschool tydef]什么是 JSON ?JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)JSON 是轻量级的文本数据交换格式JS ...
- 使用Oracle安装账户登录数据库
如果Linux或Unix平台,安装了Oracle,而且有root账号,则使用“su Oracle安装账户”的方式,sqlplus登录到数据库,这种方式是最可靠的.正如@dbsnake所说,”主要是Or ...
- JavaScript判断图片是否加载完成
一.load事件 <!DOCTYPE HTML><html> <head> <meta charset="utf-8"> ...
- linux-FTP服务常用命令及测试
一.vsftpd服务的安装,启动及关闭1.安装vsftpd[root@rusky bdump]# yum install vsftpd --必须配置yum源才能使用yum命令来安装vsftpd,或者挂 ...