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

 更新时间:2022年02月18日 09:24:13   作者:我是小白呀  
字符串暴力匹配算法是指在一个长字符串中暴力寻找是否包含某一子串所谓暴力匹配,就是不使用任何其他算法,将两个字符串中的字符一一进行比对

概述

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

字符串匹配

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

举个例子:

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

暴力匹配

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

  • 如果charArray1[i] == charArray2[j], 即匹配成功, i++, j++, 继续匹配下一个字符
  • 如果匹配失败, i 重置为i - (j - 1), j 重置成 0, 继续暴力匹配

暴力匹配实现

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

到此这篇关于Java 数据结构与算法系列精讲之字符串暴力匹配的文章就介绍到这了,更多相关Java 字符串暴力匹配内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中字符数组和字符串与StringBuilder和字符串转换的讲解

    Java中字符数组和字符串与StringBuilder和字符串转换的讲解

    今天小编就为大家分享一篇关于Java中字符数组和字符串与StringBuilder和字符串转换的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • 浅谈Hibernate对象状态之间的神奇转换

    浅谈Hibernate对象状态之间的神奇转换

    这篇文章主要介绍了浅谈Hibernate对象状态之间的神奇转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • springboot mybatis-plus实现登录接口

    springboot mybatis-plus实现登录接口

    本文主要介绍了springboot mybatis-plus实现登录接口,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • SpringBoot实现接口版本控制的示例代码

    SpringBoot实现接口版本控制的示例代码

    这篇文章主要介绍了springboot如何实现接口版本控制,接口版本控制,比如微服务请求中某个接口需要升级,正常做法是升级我们的版本,文中有详细的代码示例供大家参考,具有一定的参考价值,需要的朋友可以参考下
    2024-03-03
  • 实例讲解Java的设计模式编程中责任链模式的运用

    实例讲解Java的设计模式编程中责任链模式的运用

    这篇文章主要介绍了Java的设计模式编程中责任链模式的运用,讲解了通过条件判断结构来分配不同对象的责任权限,需要的朋友可以参考下
    2016-02-02
  • 基于Springboot2.3访问本地路径下静态资源的方法(解决报错:Not allowed to load local resource)

    基于Springboot2.3访问本地路径下静态资源的方法(解决报错:Not allowed to load local

    这篇文章主要介绍了基于Springboot2.3访问本地路径下静态资源的方法(解决报错:Not allowed to load local resource),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Java中Array List与Linked List的实现分析

    Java中Array List与Linked List的实现分析

    这篇文章主要给大家介绍了关于Array List与Linked List实现的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • Java使用Hutool+自定义注解实现数据脱敏

    Java使用Hutool+自定义注解实现数据脱敏

    我们在使用手机银行的时候经常能看到APP上会将银行卡的卡号中间部分给隐藏掉使用 ***** 来代替,在某些网站上查看一些业务密码时(例如签到密码等)也会使用 ***** 来隐藏掉真正的密码,那么这种方式是如何实现的呢,本文将给大家介绍使用Hutool+自定义注解实现数据脱敏
    2023-09-09
  • Java数据类型之细讲char类型与编码关系

    Java数据类型之细讲char类型与编码关系

    这几天一直在复习Java基础知识,特地写了一篇文章来做一下笔记,文中有非常详细的图文示例,对正在学习java的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • java 中HashMap、HashSet、TreeMap、TreeSet判断元素相同的几种方法比较

    java 中HashMap、HashSet、TreeMap、TreeSet判断元素相同的几种方法比较

    这篇文章主要介绍了从源码的角度浅析HashMap、TreeMap元素的存储和获取元素的逻辑;从Map与Set之间的关系浅析常用的Set中元素的存储和判断是否重复的逻辑,需要的朋友可以参考下
    2017-01-01

最新评论