字符串模式匹配——BF算法
一 点睛
模式匹配:子串的定位运算被称为串的模式匹配或串匹配。
假设有两个串S、T,设 S 为主串,也称为正文串,T 为子串,也称为模式。在主串 S 中查找模式 T 相匹配的子串,如果查找成功,则返回匹配的子串的第 1 个字符在主串的位置。
最笨的算法就是穷举所有 S 的所有子串,判断是否与 T 相匹配,该算法被称为 BF( 暴力穷举)算法。
二 算法步骤
1 i=0,j=0,如果S[i]=T[j],则 i++,j++,继续比较否则转向下一步。
2 i=1,j=0,如果S[i]=T[j],则 i++,j++,继续比较否则转向下一步。
3 i=2,j=0,如果S[i]=T[j],则 i++,j++,继续比较否则转向下一步。
......
4 如果 T 比较完毕,则返回 T 在 S 中第 1 个字符位置。
5 如果 S 比较完毕,则返回 0,说明 T 在 S 中未出现。
三 代码
package bf;import java.util.Scanner;public class BF {static int bF(String s, String t, int pos) {int i = pos, j = 0, sum = 0;int slen = s.length();int tlen = t.length();while (i < slen && j < tlen) {sum++;if (s.charAt(i) == t.charAt(j)) // 如果相等,则继续比较后面的字符{i++;j++;} else {i = i - j + 1; // i 回退到上一轮开始比较的下一个字符j = 0; // j 回退到第 1 个字符}}System.out.println("一共比较了" + sum + "次");if (j >= tlen) // 匹配成功return i - tlen + 1;elsereturn 0;}public static void main(String[] args) {String s, t;Scanner scanner = new Scanner(System.in);s = scanner.nextLine();t = scanner.nextLine();System.out.println(bF(s, t, 0));}
}
四 测试
绿色为输入,白色为输出。
1 第一次测试
2 第二次测试
字符串模式匹配——BF算法相关推荐
- 算法笔记:简单的字符串模式匹配-BF算法
字符串模式匹配是匹配字符串A中是否存在子串a,一般字符串的结尾为'\0',可以以此作为字符串结束的判定标准. 其过程原理图如下所示: 给出源代码: #include<stdio.h> #i ...
- 模式匹配——BF算法
1.BF算法(蛮力匹配): (1)从主串S的第一个字符开始和模式T的第一个字符进行比较,若相等,则比较后续字符:否则,从主串S的第二个字符开始和模式T的第一个字符进行比较. (2)重复步骤(1),直到 ...
- 字符串的模式匹配--BF算法KMP算法
BF算法是基于主串指针回溯,重新与子串进行逐字符进行比较,主串为S什么要进行回溯呢,原因在于模式P中存在相同的字符或者说由字符(串)存在重复(模式的部分匹配性质),设想如果模式P中字符各不相同,主串就 ...
- 数据结构与算法(5)字符串(BF算法、KMP算法及KMP算法优化)
目录 一.BF算法(暴力算法) 二.KMP算法 三.KMP算法优化 一.BF算法(暴力算法) 一个一个往后匹配,匹配失败继续从母串下一个和头(子串的头)往后继续匹配. 虽然简单,但是需要较多的时间复杂 ...
- 数据结构:模式匹配BF算法
一.BF算法原理 子串的定位操作通常称为串的模式匹配(其中T称为模式串).这是串的一个重要操作,许多软件,如果有编辑菜单的话,则其中必有查找子菜单项,这就是一个模式匹配问题.. Index(S, T, ...
- 算法笔记:简单的字符串模式匹配-KMP算法(与BF算法对比时间复杂度)
简单的讲就是字符串不回溯. #include<stdio.h> #include<stdlib.h> #include<string.h>int countBF = ...
- 字符串模式匹配KMP算法详解(Python语言)
问题描述 主串为 ′ababcabcacbab′ ′ a b a b c a b c a c b a b ′ 'ababcabcacbab',模式串为 ′abcac′ ′ a b c a c ′ 'a ...
- 《数据结构》实验报告四:串的模式匹配(BF算法、KMP算法)
一.实验目的 1.了解串的基本概念. 2.掌握串的模式匹配算法的实现 . 二.实验预习 说明以下概念 1.模式匹配: 串的模式匹配就是子串的定位运算. 设有两个字符串 S 和 T ,S为主串(正文串) ...
- 数据结构---BF字符串模式匹配
数据结构-BF字符串模式匹配 原理:参考趣学数据结构 代码: #include<stdio.h> #include<stdlib.h> int BF(char * S, cha ...
- 字符串模式匹配——最长公共子序列与子串 KMP 算法
最长公共子序列 最长公共子序列的问题很简单,就是在两个字符串中找到最长的子序列,这里明确两个含义: 子串:表示连续的一串字符 . 子序列:表示不连续的一串字符. 所以这里要查找的是不连续的最长子序列, ...
最新文章
- 软件篇:程序员如何提升自己的技能
- 初识 Knative: 跨平台的 Serverless 编排框架
- Spark源码分析之九:内存管理模型
- SCCM2012R2七:msi软件分发和卸载
- Silverlight学习笔记之文字特效之ImageBrush
- iPhone开发经典语录
- java排序链表冒泡排序_Java中的冒泡排序
- Windows Media Player单例模式
- python基础教学PPT讲义(基础部分)
- (一)Quartz2.2.1 简单例子
- mysql学习书籍推荐
- 百度2014移动研发笔试题目
- 服务器如果清理垃圾文件,为citrix服务器清理垃圾文件事件
- STL之vector中push_back的时间复杂度分析
- 我有一壶酒,足以慰风尘
- PC端QQ用某个账号登陆未响应情况解决
- 英文单词cipher 和password的区别,用法有什么不同,
- 【毕业设计】基于云平台的火灾报警器 - stm32 物联网 单片机 OneNET云平台
- 状语从句不是简单句_简单句、复合句Gloria总结
- 字符串转化为Json