zoukankan      html  css  js  c++  java
  • 【UOJ 652】寻找串

    【题目描述】:

    给定一个字符串 A和一个字符串 B,求 B在 A中的出现次数。A和 B中的字符均为英语大写字母或小写字母。

    A中不同位置出现的 B可重叠。

    【输入描述】:

    输入共两行,分别是字符串 A和字符串 B。

    【输出描述】:

    输出一个整数,表示 B在 A中的出现次数。

    【样例输入】:

    zyzyzyz
    zyz

    【样例输出】:

    3

    【时间限制、数据范围及描述】:

    时间:1s 空间:64M

    1<=A,B的长度<=10^6;A、B仅包含大小写字母。

    题解:最近泡在字符串海洋里啦,好多之前不太会的算法,都在慢慢熟悉了!冲冲冲!!

              一道Hash的题目(又是模板题吨吨吨?)

    #include<cmath>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<iostream>
    #include<algorithm>
    #include<bits/stdc++.h>
    typedef long long ll;
    using namespace std;
    const int N=1090002;
    const int Q=131;
    char a[N],b[N];
    int main(){
        
        gets(a); gets(b);
        int n=strlen(a);
        int m=strlen(b);
        int ans; 
        if(m>n) { cout<<0; return 0; }
        ll ha=0,hb=0,fu=1;
        for(int i=0;i<m;i++){
            ha=ha*Q+a[i];
            hb=hb*Q+b[i];
            fu*=Q;
        }
        ans=(ha==hb);
        for(int i=m;i<n;i++){
            ha=ha*Q+a[i]-fu*a[i-m];
            ans+=(ha==hb); 
        }
        cout<<ans<<endl;
        return 0;
    }
  • 相关阅读:
    每天一个命令
    2017-2-21
    egrep []+ 和awk总结
    ifconfig eth0 取行取列
    stat /etc/hosts 取行取列644
    压缩解压缩
    目录
    公告
    To do list
    CSP 2019 游记
  • 原文地址:https://www.cnblogs.com/wuhu-JJJ/p/13511521.html
Copyright © 2011-2022 走看看