一 点睛

模式匹配:子串的定位运算被称为串的模式匹配或串匹配。

假设有两个串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算法相关推荐

  1. 算法笔记:简单的字符串模式匹配-BF算法

    字符串模式匹配是匹配字符串A中是否存在子串a,一般字符串的结尾为'\0',可以以此作为字符串结束的判定标准. 其过程原理图如下所示: 给出源代码: #include<stdio.h> #i ...

  2. 模式匹配——BF算法

    1.BF算法(蛮力匹配): (1)从主串S的第一个字符开始和模式T的第一个字符进行比较,若相等,则比较后续字符:否则,从主串S的第二个字符开始和模式T的第一个字符进行比较. (2)重复步骤(1),直到 ...

  3. 字符串的模式匹配--BF算法KMP算法

    BF算法是基于主串指针回溯,重新与子串进行逐字符进行比较,主串为S什么要进行回溯呢,原因在于模式P中存在相同的字符或者说由字符(串)存在重复(模式的部分匹配性质),设想如果模式P中字符各不相同,主串就 ...

  4. 数据结构与算法(5)字符串(BF算法、KMP算法及KMP算法优化)

    目录 一.BF算法(暴力算法) 二.KMP算法 三.KMP算法优化 一.BF算法(暴力算法) 一个一个往后匹配,匹配失败继续从母串下一个和头(子串的头)往后继续匹配. 虽然简单,但是需要较多的时间复杂 ...

  5. 数据结构:模式匹配BF算法

    一.BF算法原理 子串的定位操作通常称为串的模式匹配(其中T称为模式串).这是串的一个重要操作,许多软件,如果有编辑菜单的话,则其中必有查找子菜单项,这就是一个模式匹配问题.. Index(S, T, ...

  6. 算法笔记:简单的字符串模式匹配-KMP算法(与BF算法对比时间复杂度)

    简单的讲就是字符串不回溯. #include<stdio.h> #include<stdlib.h> #include<string.h>int countBF = ...

  7. 字符串模式匹配KMP算法详解(Python语言)

    问题描述 主串为 ′ababcabcacbab′ ′ a b a b c a b c a c b a b ′ 'ababcabcacbab',模式串为 ′abcac′ ′ a b c a c ′ 'a ...

  8. 《数据结构》实验报告四:串的模式匹配(BF算法、KMP算法)

    一.实验目的 1.了解串的基本概念. 2.掌握串的模式匹配算法的实现 . 二.实验预习 说明以下概念 1.模式匹配: 串的模式匹配就是子串的定位运算. 设有两个字符串 S 和 T ,S为主串(正文串) ...

  9. 数据结构---BF字符串模式匹配

    数据结构-BF字符串模式匹配 原理:参考趣学数据结构 代码: #include<stdio.h> #include<stdlib.h> int BF(char * S, cha ...

  10. 字符串模式匹配——最长公共子序列与子串 KMP 算法

    最长公共子序列 最长公共子序列的问题很简单,就是在两个字符串中找到最长的子序列,这里明确两个含义: 子串:表示连续的一串字符 . 子序列:表示不连续的一串字符. 所以这里要查找的是不连续的最长子序列, ...

最新文章

  1. 软件篇:程序员如何提升自己的技能
  2. 初识 Knative: 跨平台的 Serverless 编排框架
  3. Spark源码分析之九:内存管理模型
  4. SCCM2012R2七:msi软件分发和卸载
  5. Silverlight学习笔记之文字特效之ImageBrush
  6. iPhone开发经典语录
  7. java排序链表冒泡排序_Java中的冒泡排序
  8. Windows Media Player单例模式
  9. python基础教学PPT讲义(基础部分)
  10. (一)Quartz2.2.1 简单例子
  11. mysql学习书籍推荐
  12. 百度2014移动研发笔试题目
  13. 服务器如果清理垃圾文件,为citrix服务器清理垃圾文件事件
  14. STL之vector中push_back的时间复杂度分析
  15. 我有一壶酒,足以慰风尘
  16. PC端QQ用某个账号登陆未响应情况解决
  17. 英文单词cipher 和password的区别,用法有什么不同,
  18. 【毕业设计】基于云平台的火灾报警器 - stm32 物联网 单片机 OneNET云平台
  19. 状语从句不是简单句_简单句、复合句Gloria总结
  20. 字符串转化为Json

热门文章

  1. SQLServer简繁互换
  2. 繁凡的ACM模板(满注释模板)
  3. 国内计算机三大期刊+ JCST
  4. qq服务器传输文件,QQ离线传文件功能简介
  5. java连接mysql数据,实现快递单管理信息系统
  6. 侧滑菜单--狸菇凉_
  7. 使用JQuery快速高效制作网页交互特效第二章所有上机
  8. 打开u盘显示参数错误
  9. 微信视频号迅速突破“快抖”封锁 ,换挡提速!
  10. Linux(Centos7)日志管理