当前位置: 首页 > article >正文

暴⼒匹配算法和KMP算法介绍

暴⼒匹配算法

有⼀个字符串str1 ="BBC ABCDAB ABCDABCDABDE"
⼀个⼦串str2 = "ABCDABD"
现在要判断str1是否含有str2,如果存在,就返回第⼀次出现的位置,如果没有,则返回-1
暴⼒匹配算法
package ViolenceMatch;
public class ViolenceMatch {
     public static void main(String[] args) {
        String s1 ="BBC ABCDAB ABCDABCDABDE" ;
        String s2 ="太阳和⼩绿" ;
        int m = violence(s1, s2);
        System.out.println(m);
 
    }
 public static int violence(String s1,String s2) {
 
    char a[] = s1.toCharArray();
    char b[] = s2.toCharArray();
    int i =0;
    int j =0;
    while(i<s1.length()&&j<s2.length()) {
        if(a[i]==b[j]) {
            i++;
            j++;
        }else {
            i = i-j+1;
            j =0;
        }
    }
   if(j==s2.length()) {
        return i -j;
    }else {
        return -1;
    }
    }
}

KMP算法介绍

 https://www.cnblogs.com/zzuuoo666/p/9028287.html

 

package ViolenceMatch;
import java.util.Arrays;
public class KMPAlgorithm {
    public static void main(String[] args) {
        String s1 = "BBC ABCDAB ABCDABCDABDE";
        String s2 = "ABCDABD";
        int next[] = kmpNext("ABCDABD");
        System.out.println("next="+Arrays.toString(next));
        int k = kmpSearch(s1, s2, next);
        System.out.print(k);
    }
    public static int kmpSearch(String s1,String s2,int next[]) {
        for(int i =0,j =0;i<s1.length();i++) {
            while(j>0&&s1.charAt(i)!=s2.charAt(j)) {
                j =next[j-1];
            }
            if(s1.charAt(i)==s2.charAt(j)) {
                j++;
            }
            if(j==s2.length()) {
                return i-j+1;
            }
        }
        return -1;
    }
     public static int[] kmpNext(String dest) {
         int next[] = new int[dest.length()];
         next[0] =0;
         for(int i =1,j=0;i<dest.length();i++) {
             while(j>0&&dest.charAt(i)!=dest.charAt(j)) {
                 j = next[j-1];
             }
             if(dest.charAt(i)==dest.charAt(j)) {
                 j++;
             }
             next[i]= j;
         }
         return next;
     }
}


http://www.kler.cn/a/430596.html

相关文章:

  • 互联网视频云平台EasyDSS无人机推流直播技术如何助力野生动植物保护工作?
  • 【Linux】进程间通信 -> 匿名管道命名管道
  • Django 模型中使用选择(choices):全面指南
  • SpringCloud 系列教程:微服务的未来(二)Mybatis-Plus的条件构造器、自定义SQL、Service接口基本用法
  • GFPS扩展技术原理(七)-音频切换消息流
  • More Effective C++之技术Techniques,Idioms,Patterns_条款26-27
  • 【实验15】LSTM的记忆能力实验
  • C++参数传递
  • 汽车总线协议分析-CAN总线
  • aosp15上winscope离线html如何使用?
  • Lambda表达式随记
  • 多AI代理框架全面对比:AutoGen、LangGraph、CrewAI、Swarm、Magentic-One,选对你的AI超级助手!
  • 软件测试丨Appium 源码分析与定制
  • 网络编程(2)(对于UDP与TCP协议深层理解)
  • hhdb客户端介绍(10)
  • 实时数据开发|Flink状态类型
  • 【面试】Spirng的IOC启动流程
  • qmake 生成debug/qmake 生成release
  • Linux 常用命令大全:文件管理、系统信息、网络操作
  • 40分钟学 Go 语言高并发:服务监控与追踪
  • selenium:新窗口切换、关闭
  • 【优选算法篇】:揭开二分查找算法的神秘面纱--数据海洋中的精准定位器
  • 深入探索 JVM:原理、机制与实战
  • docker-compose 安装部署zabbix
  • 2024年发布的多模态大语言模型和它们采用的设计方法
  • RabbitMQ如何保证消息不被重复消费