zoukankan      html  css  js  c++  java
  • 字符串的hash匹配

      如果要比较字符串是否相等,首先想到的是KMP算法,但是hash更加简洁易于编写,hash的目的是把一串字符转化成一个数字,用数字来比较是否相等。我让mod=912837417 Base=127,防止hash碰撞

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long LL;
     4 const LL mod=912837417;
     5 const LL Base=127;
     6 char T[5000],P[5000];
     7 LL lenT,lenP;
     8 LL hash[5000]; 
     9 LL base[5000];
    10 LL hashP;
    11 inline LL query(LL l,LL r){
    12     LL ans=(hash[r]-(hash[l-1]*base[r-l+1]))%mod;
    13     if(ans<0) ans+=mod;
    14     return ans;
    15 }
    16 int main(){
    17     scanf("%s%s",T+1,P+1);
    18     lenT=strlen(T+1); lenP=strlen(P+1);
    19     base[0]=1;
    20     for(int i=1;i<=lenT;i++){
    21         base[i]=(base[i-1]*Base)%mod;
    22         hash[i]=(hash[i-1]*Base+(LL)(T[i]-'a'+1))%mod;
    23         if(i<=lenP) hashP=(hashP*Base+(LL)(P[i]-'a'+1))%mod;
    24     }
    25     for(int i=1;i<=lenT-lenP+1;i++){
    26         LL now=query(i,i+lenP-1);
    27         if(now==hashP){
    28             cout<<"从第"<<i<<"位开始匹配"<<endl;
    29             return 0;
    30         }
    31     }
    32     cout<<"不能匹配"<<endl;
    33     return 0;
    34 }
  • 相关阅读:
    IDLHDF5读取与转换
    IDL计算儒略日
    DOMContentLoaded和Window: load event
    eventloop(事件循环机制)
    @types
    ES6 Module import & export
    switch case
    python基础
    react-hooks 官方文档笔记
    base64编码图片
  • 原文地址:https://www.cnblogs.com/CXCXCXC/p/4935210.html
Copyright © 2011-2022 走看看