算法模板——KMP字符串匹配

功能:输入一个原串,再输入N个待匹配串,在待匹配串中找出全部原串的起始位置

原理:KMP算法,其实这个东西已经包含了AC自动机的思想(fail指针/数组),只不过适用于单模板匹配,不过值得一提的是在单模板大量匹配待匹配串时,这个会有相当大的优势,AC自动机虽然好想一些,但是在这一类问题上的性价比就略低了

复制代码
 1 var
 2    i,j,k,l,m,n:longint;
 3    a:array[0..100000] of longint;
 4    s1,s2:ansistring;
 5 begin
 6      readln(s1);
 7      a[1]:=0;
 8      for i:=2 to length(s1) do
 9          begin
10               j:=a[i-1];
11               while (j>0) and (s1[j+1]<>s1[i]) do j:=a[j];
12               if s1[j+1]=s1[i] then a[i]:=j+1 else a[i]:=0;
13          end;
14      readln(n);
15      for l:=1 to n do
16          begin
17               readln(s2);
18               j:=0;
19               for i:=1 to length(s2) do
20                   begin
21                        inc(j);
22                        if s1[j]=s2[i] then
23                           begin
24                                if j=length(s1) then
25                                    begin
26                                         write(i-length(s1)+1,' ');
27                                         j:=a[j];
28                                    end;
29                           end
30                        else
31                            begin
32                                 j:=j-1;
33                                 while (j>0) and (s1[j+1]<>s2[i]) do j:=a[j];
34                                 if s1[j+1]=s2[i] then inc(j) else j:=0;
35                            end;
36                   end;
37               writeln;
38          end;
39      readln;
40 end.
41                    
复制代码

 

posted @   HansBug  阅读(198)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示