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 字符串暴力匹配内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Kafka消费客户端协调器GroupCoordinator详解

    Kafka消费客户端协调器GroupCoordinator详解

    这篇文章主要为大家介绍了Kafka消费客户端协调器GroupCoordinator使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Java源码解析之LinkedHashMap

    Java源码解析之LinkedHashMap

    LinkedHashMap是HashMap的子类,所以也具备HashMap的诸多特性.不同的是,LinkedHashMap还维护了一个双向链表,以保证通过Iterator遍历时顺序与插入顺序一致.除此之外,它还支持Access Order, ,需要的朋友可以参考下
    2021-05-05
  • Java8新特性stream和parallelStream区别

    Java8新特性stream和parallelStream区别

    这篇文章主要介绍了Java8新特性stream和parallelStream区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Java之单链表问题解决案例讲解

    Java之单链表问题解决案例讲解

    这篇文章主要介绍了Java之单链表问题解决案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Java httpClient介绍以及使用示例

    Java httpClient介绍以及使用示例

    这篇文章主要介绍了Java httpClient介绍以及使用示例,帮助大家更好的利用Java实现HTTP请求,感兴趣的朋友可以了解下
    2020-10-10
  • Java使用BigDecimal公式精确计算及精度丢失问题

    Java使用BigDecimal公式精确计算及精度丢失问题

    在工作中经常会遇到数值精度问题,比如说使用float或者double的时候,可能会有精度丢失问题,下面这篇文章主要给大家介绍了关于Java使用BigDecimal公式精确计算及精度丢失问题的相关资料,需要的朋友可以参考下
    2023-01-01
  • Java并发底层实现原理学习心得

    Java并发底层实现原理学习心得

    本片文章是学习Java并发底层实现原理的一篇知识心得,对大家学习这个方便的知识很有帮助,一起参考下。
    2018-01-01
  • spring4.3 实现跨域CORS的方法

    spring4.3 实现跨域CORS的方法

    下面小编就为大家分享一篇spring4.3 实现跨域CORS的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • spring @Profiles和@PropertySource实现根据环境切换配置文件

    spring @Profiles和@PropertySource实现根据环境切换配置文件

    这篇文章主要介绍了spring @Profiles和@PropertySource根据环境切换配置文件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Maven打包跳过测试的三种方法

    Maven打包跳过测试的三种方法

    这篇文章主要介绍了Maven打包跳过测试的三种方法,帮助大家更好的理解和使用maven,感兴趣的朋友可以了解下
    2020-11-11

最新评论