概念

单模式字符串匹配就是一个字符串a和另一个字符串b进行匹配,一般而言,a的长度远大于b,我们在a中查找是否包含b。我们将字符串a称为主串,字符串b称为模式串。

BF算法

BF算法成为暴力匹配算法,又叫做朴素匹配算法。也是最简单的,我们经常用到的算法。最简单的方法就是每次比对m个字符,最坏情况下比较n-m+1次,BF算法的最坏情况时间复杂度为O(n*m)。

步骤
1 模式串一个个与主串字符比较,如果相同接着比较,不相同则主串移动一位,接着和模式串从头开始一个个比较

  1. package com.github.strings;
  2. public class bf {
  3. public static int search(String str,String pat){
  4. int sLen = str.length();// 主字符串
  5. int pLen = pat.length();// 模式串长度
  6. // 需要匹配的次数
  7. for (int i=0;i<=sLen-pLen;i++){
  8. int j ;
  9. // 遍历模式串
  10. for (j=0;j<pLen;j++){
  11. if (pat.charAt(j)!=str.charAt(i+j)){
  12. break;
  13. }
  14. }
  15. // 如果j移动到模板末尾了 说明匹配成功了
  16. if (j==pLen) return i ;
  17. }
  18. return -1;
  19. }
  20. public static void main(String[] args) {
  21. System.out.println(search("helloWorld","hello"));
  22. System.out.println(search("helloWorld","World"));
  23. System.out.println(search("aaaaaaab","aaab"));
  24. System.out.println(search("helloWorld","lo"));
  25. System.out.println(search("aacaaab","aaab"));
  26. }
  27. }