查找字符串之 BF算法
2014-08-03 18:25
162 查看
BF 算法最简单的查找查找字符串算法:
匹配串S同模式串P,逐个字节比较,失败后向后移动一个字节继续比较。直至成功或者比较结束。
形如 :--A A A A ----
比较1:--B B B B
比较2:-- B B B B ---
比较3: B B B B --
.....
这种方式简单粗暴如其名(Brute Force),但是效率较低,用在比较短的字符串查找,没有问题。
时间复杂度O(strlen(S)*strlen(P))
空间复杂度O(1)
以下代码山寨自vc strstr:
const char* strstr( const char* S , const char* P )
{
if ( !S || !P )
{
return NULL;
}
if ( !*P )
{
return S;// "" 匹配于任何字符串。
}
/*
if ( strlen(P) > strlen(S) )
{
return NULL;
}
*/
char *s = (char*)S;
char *s1,*s2;
while( *s )
{
s1 = s;
s2 = (char*)P;
while( *s1 && *s2 && !(*s1-*s2) )
s1++,s2++;
if ( !*s2 )
return s; //配置至模式串的最后,匹配成功.
//常规来说,这里应该判定 S + strlen(S) - s < strlen(P),剩余需要匹配的串已经小于模式串了就应该返回,
//可是vc的代码没有,我想应该是觉得调用strlen函数带来的开销,比把剩余的比较完带来的开销还大,或者说不好衡量。索性没有判定长度。
//事实上,BF算法的一个很重要的性质就是不需要知道串(匹配串,模式串)的长度,而其他基于跳跃的算法都是需要知道串的长度的.
s++; //匹配失败,向后移动一个字节继续比较。
}
return NULL;
}
匹配串S同模式串P,逐个字节比较,失败后向后移动一个字节继续比较。直至成功或者比较结束。
形如 :--A A A A ----
比较1:--B B B B
比较2:-- B B B B ---
比较3: B B B B --
.....
这种方式简单粗暴如其名(Brute Force),但是效率较低,用在比较短的字符串查找,没有问题。
时间复杂度O(strlen(S)*strlen(P))
空间复杂度O(1)
以下代码山寨自vc strstr:
const char* strstr( const char* S , const char* P )
{
if ( !S || !P )
{
return NULL;
}
if ( !*P )
{
return S;// "" 匹配于任何字符串。
}
/*
if ( strlen(P) > strlen(S) )
{
return NULL;
}
*/
char *s = (char*)S;
char *s1,*s2;
while( *s )
{
s1 = s;
s2 = (char*)P;
while( *s1 && *s2 && !(*s1-*s2) )
s1++,s2++;
if ( !*s2 )
return s; //配置至模式串的最后,匹配成功.
//常规来说,这里应该判定 S + strlen(S) - s < strlen(P),剩余需要匹配的串已经小于模式串了就应该返回,
//可是vc的代码没有,我想应该是觉得调用strlen函数带来的开销,比把剩余的比较完带来的开销还大,或者说不好衡量。索性没有判定长度。
//事实上,BF算法的一个很重要的性质就是不需要知道串(匹配串,模式串)的长度,而其他基于跳跃的算法都是需要知道串的长度的.
s++; //匹配失败,向后移动一个字节继续比较。
}
return NULL;
}
相关文章推荐
- 数据结构学习——字符串查找BF算法
- 字符串查找KMP算法和BF算法
- vim的查找字符串
- java字符串位置查找的代码实现
- 查找字符串中的子字符串数目
- eclipse 全文搜索查找字符串
- linux查找目录下的所有文件中是否含有某个字符串
- LintCode 字符串查找(暴力法+KMP)
- linux查找目录下的所有文件中是否含有某个字符串
- Linux在指定目录下查找包含指定字符串的文件
- 剑指offer——查找一个字符串中第一次出现一次的字符(哈希直接定址法)
- 测试C库函数字符串查找-win7-vc6
- 几种字符串查找方法
- 查找字符串中的字母出现多少次
- *字符串-01. 在字符串中查找指定字符
- C++面试查找字符串中是否包含另一个字符串
- JavaScript字符串的查找,indexOf,lastIndexOf,search的区别
- 字符串的查找与替换
- 查找字符串中第一个出现的不重复的字符
- linux下查找含有某个字符串的文件命令