Java实现字符串匹配的示例代码
作者:CoderDreams 发布时间:2023-04-17 05:24:35
标签:java,字符串,匹配
java实现字符串匹配
暴力匹配
/**
* 暴力匹配
*
* @param str1 需要找的总字符串
* @param str2 需要找到的字符串
* @return 找到的字符串的下标
*/
private static int violence(String str1, String str2) {
char[] s1 = str1.toCharArray();
char[] s2 = str2.toCharArray();
int s1Len = s1.length;
int s2Len = s2.length;
// 指针,分别指向两个字符串
int i = 0;
int j = 0;
// 保证匹配时不越界
while (i < s1Len && j < s2Len) {
// 第一个字符匹配上了
if (s1[i] == s2[j]) {
++i;
++j;
} else {
i -= (j - 1);
j = 0;
}
}
// 判断是否成功
if (j == s2Len) {
return i - j;
} else {
return -1;
}
KMP算法
/**
* KMP算法
*
* @param str1 源字符串
* @param str2 子串
* @param next 匹配值表
* @return 对应下标,没有为-1
*/
private static int kmp(String str1, String str2, int[] next) {
for (int i = 0, j = 0; i < str1.length(); ++i) {
while (j > 0 && str1.charAt(i) != str2.charAt(j)) {
j = next[j - 1];
}
if (str1.charAt(i) == str2.charAt(j)) {
j++;
if (j == str2.length()) {
return i - j + 1;
}
return -1;
}
* @return dest的部分匹配表
private static int[] getkmpNext(String dest) {
int length = dest.length();
int[] next = new int[length];
next[0] = 0;
for (int i = 1, j = 0; i < length; i++) {
while (j > 0 && dest.charAt(i) != dest.charAt(j)) {
if (dest.charAt(i) == dest.charAt(j)) {
next[i] = j;
return next;
来源:https://www.cnblogs.com/coderDreams/p/16188698.html
0
投稿
猜你喜欢
- 一. 关键字Java中的关键字是由特定的单词组成,单词全为小写字母,每个都有特殊的含义,其实Java关键字也就那几十个,这个不需要背,以后都
- 责任链模式责任链模式的定义:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系, 将这个对象连成一条链,并沿着这条链传递
- 之前写了一篇文章:Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码),介绍了如何使用Java原生IO支持进行网络编程,本文
- 首先项目A,也就是SpringBOOT项目中使用redisTemplate 来做REDIS的缓存时,你会发现存到REDIS里边的KEY和VA
- 若使用 Spring IoC 容器(ApplicationContext或BeanFactory)作为你的业务对象(你也应该这么做!),你会
- 本文实例讲述了Android编程使用AlarmManager设置闹钟的方法。分享给大家供大家参考,具体如下:package com.Aina
- 本文实例为大家分享了Java实现图形化界面日历的具体代码,供大家参考,具体内容如下此程序主要功能实现了可以根据用户选择的年月日来定位日期,日
- 最近在开发一个项目,需要写一个后管系统,Bootstrap是美国Twitter公司的设计师Mark Otto和Jacob Thornton合
- 条码的应用已深入生活和工作的方方面面。在处理条码时,常需要和各种文档格式相结合。当需要在文档中插入、编辑或者删除条码时,可借助于一些专业的类
- 大家好,今天尝试用swing技术写一个贪吃蛇大作战小游戏,供大家参考。 效果展示效果展示一、游戏界面二、得分情况&nb
- 通常来说,多线程的并发及条件断点的debug是很难完成的,或许本篇文章会给你提供一个友好的调试方法。让你在多线程开发过程中的调试更加的有的放
- 本文实例为大家分享了java实现学生成绩档案管理系统的具体代码,供大家参考,具体内容如下实验要求• 学生信息录入,信息包括学号、姓名、专业、
- 本文介绍如何通过C#程序代码方法将XML文件转换为Word文档,包括转为.doc /.docx等格式。并附VB.NET代码,有需要可供参考。
- Springcloud Config什么是springcloud Config  简单来说,Spring
- 概念 在 HTML 中,<a>, <form>, <img>, <script>,
- OutputDebugString属于windows API的,所以只要是包含了window.h这个头文件后就可以使用了。可以把调
- SpringMVC实现RESTful风格RESTful中文释义为”表现层状态转换“,它不是一种标准,
- 目录一、简述二、内容一、简述利用C# TcpClient在局域网内传输文件,可是文件发送到对面的时候却要重新命名文件的。那可不可以连着文件名
- 在我们日常开发过程中,通常会涉及到数据权限问题,下面以我们常见的一种场景举例:一个公司有很多部门,每个人所处的部门和角色也不同,所以数据权限
- 一、准备工作小编今天以 QQ邮箱 进行演示操作。想要使用代码操作邮箱发送邮件,需要在邮箱设置中申请开通 POP3/SMTP 服务。接下来跟着