字串查詢(字串雜湊)
這是一道模板題。
給定一個字串 A 和一個字串 B ,求 B在 A 中的出現次數。 A和 B中的字元均為英語大寫字母或小寫字母。
A中不同位置出現的 B可重疊。
輸入格式
輸入共兩行,分別是字串 A和字串 B。
輸出格式
輸出一個整數,表示 B在 A中的出現次數。
樣例輸入
zyzyzyz
zyz
樣例輸出
3
資料範圍與提示
1<= A,B的長度<=10^6 ,A、 B僅包含大小寫字母。
字串雜湊模板提
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define K 131
#define ULL unsigned long long
int N;
char s1[1000010], s2[1000010];
ULL a[1000010],f[1000010],l1,l2,t;
ULL find(int x,int y) //計算下標 x到 y的子串的雜湊值
{
return f[y]-f[x-1]*a[y-x+1];
}
int main()
{
int i,j;
a[0]=1;
for(i=1; i<=1000000; ++i) //先遍歷出 a^n
a[i]=a[i-1]*K;
int sum=0;
t=0;
scanf("%s%s",s1+1,s2+1); //從下標 1開始存
l1=strlen(s1+1);
l2=strlen(s2+1);
for(j=1; j<=l1; j++)
f[j]=f[j-1]*K+(s1[j]-'A'+1); //計算主串的滾動雜湊值
for(j=1; j<=l2; j++)
t=t*K+(s2[j]-'A'+1); //計算匹配串的雜湊值
for(j=1;j+l2-1<=l1; ++j)
{
if(find(j,j+l2-1)==t) //判斷兩串是否相同
sum++;
}
printf("%d\n",sum);
return 0;
}
相關文章
- 字串雜湊字串
- 字串雜湊表字串
- 查詢(3)--雜湊表(雜湊查詢)
- SCU 4438 Censor (字串雜湊)字串
- P3370 【模板】字串雜湊字串
- 【字串】 優雅的暴力——字串下的雜湊判重問題字串
- 雜湊查詢演算法演算法
- 雜湊查詢 兩數之和
- 雜湊技術【雜湊表】查詢演算法 PHP 版演算法PHP
- python 字串查詢Python字串
- leetcode 1525 字串的好分割數目(雜湊表,字串分割)LeetCode字串
- 查詢演算法及雜湊表演算法
- linux下查詢字串Linux字串
- 字串查詢和替換字串
- 【PHP資料結構】雜湊表查詢PHP資料結構
- java查詢字串裡與指定字串相同的個數Java字串
- (字串雜湊表)找到字串中不重複出現字元的最長子串長度字串字元
- 子字串查詢演算法字串演算法
- MySQL 查詢字串的個數MySql字串
- Python中字串查詢方法Python字串
- 字串查詢之字元次數字串字元
- python怎麼查詢字串中是否包含某個字串Python字串
- Elasticsearch 複合查詢——多字串多欄位查詢Elasticsearch字串
- linux命令列印字串md5雜湊後的值Linux命令列字串
- sqlserver根據雜湊演算法生成類似uuid字串SQLServer演算法UI字串
- JS字串最長迴文查詢JS字串
- Elasticsearch 單字串多欄位查詢Elasticsearch字串
- mysql拆分字串做條件查詢MySql字串
- js字串查詢和替換功能JS字串
- mysql字串之大小寫匹配查詢MySql字串
- VC 中字串比較和查詢字串
- SQL查詢集合合併成字串SQL字串
- CoffeeScript攻略3.4:查詢子字串字串
- ES6語法學習之字串模板及字串查詢字串
- PostgreSQL-並行雜湊JOIN分析查詢效能爆炸SQL並行
- Swift3.0語言教程獲取字串編碼與雜湊地址Swift字串編碼
- 洛谷題單指南-集合-P3370 【模板】字串雜湊字串
- C#根據雜湊演算法生成類似uuid字串C#演算法UI字串