Java 数据结构与算法系列精讲之字符串暴力匹配

作者:我是小白呀 时间:2021-10-06 05:43:27 

概述

从今天开始, 小白我将带大家开启 Java 数据结构 & 算法的新篇章.

Java 数据结构与算法系列精讲之字符串暴力匹配

字符串匹配

字符串匹配 (String Matching) 指的是判断一个字符串是否包含另一个字符串.

Java 数据结构与算法系列精讲之字符串暴力匹配

举个例子:

  • 字符串 “Hello World” 包含字符串 “Hello”

  • 字符串 “Hello World” 不包含字符串 “LaLaLa”

暴力匹配

暴力匹配 (Brute-Force) 的思路:

  • 如果charArray1[i] == charArray2[j], 即匹配成功, i++, j++, 继续匹配下一个字符

  • 如果匹配失败, i 重置为i - (j - 1), j 重置成 0, 继续暴力匹配

Java 数据结构与算法系列精讲之字符串暴力匹配

暴力匹配实现


public class 暴力匹配 {

public static int BruteForce(String str1, String str2) {

// 将字符串转化为char数组
       char[] charArray1 = str1.toCharArray();
       char[] charArray2 = str2.toCharArray();

// string长度
       int length1 = charArray1.length;
       int length2 = charArray2.length;

// 调试输出
       System.out.println(charArray1);
       System.out.println(charArray2);

int i = 0;
       int j = 0;

while (i < length1 && j < length2) {

// 判断是否匹配
           if (charArray1[i] == charArray2[j]) {

// 各往后挪一位
               i++;
               j++;
           } else {

// 重新匹配
               i = i - (j - 1);
               j = 0;
           }
       }

// 匹配完成, 返回index
       if (j == length2) {
           return i - j;
       } else {
           return -1;
       }
   }

public static void main(String[] args) {

// 字符串1
       String str1 = "I am little white";

// 字符串2
       String str2 = "white";

// 暴力匹配
       int result = BruteForce(str1, str2);
       System.out.println(result);
   }
}

输出结果:

I am little white
white
12

来源:https://iamarookie.blog.csdn.net/article/details/122100621

标签:Java,数据结构,字符串,暴力匹配
0
投稿

猜你喜欢

  • 解析spring加载bean流程的方法

    2023-11-29 13:50:32
  • java中拼接字符串的5种方法效率对比

    2022-01-08 05:46:18
  • Java使用POI导出Excel(二):多个sheet

    2022-11-26 02:09:44
  • 浅谈java多线程wait,notify

    2023-11-29 16:29:03
  • Java Callable接口实现细节详解

    2023-11-10 05:34:26
  • TKmybatis的框架介绍和原理解析

    2022-08-28 21:35:42
  • 详解Android自定义控件属性TypedArray以及attrs

    2023-06-20 05:13:41
  • 浅析java中的取整(/)和求余(%)

    2023-04-30 23:46:23
  • Java class文件格式之特殊字符串_动力节点Java学院整理

    2022-02-11 14:45:59
  • Java设计模式之命令模式详解

    2023-11-15 21:18:43
  • springboot+gradle 构建多模块项目的步骤

    2023-02-19 00:33:31
  • spring boot 使用profile来分区配置的操作

    2022-11-27 22:55:15
  • SpringBoot security安全认证登录的实现方法

    2021-05-30 08:09:56
  • feign客户端设置超时时间操作

    2023-07-01 19:16:32
  • Android客户端与服务端数据加密传输方案详解

    2023-07-14 13:55:37
  • Java数据结构之顺序表的实现

    2023-06-22 00:47:26
  • Java 字符终端上获取输入三种的方式分享

    2021-12-31 04:52:45
  • Java求最小生成树的两种算法详解

    2023-11-10 07:21:24
  • 使用JPA自定义VO类型转换(EntityUtils工具类)

    2023-08-26 14:56:17
  • SpringBoot 静态资源导入及首页设置问题

    2023-11-26 22:45:07
  • asp之家 软件编程 m.aspxhome.com