「 「 「字符串算法 」 」 」第 2 2 2章 H a s h Hash Hash和 H a s h Hash Hash表(前 3 3 3题)
后半章 l i n k link link
目录:
A.字符串哈希
B.回文子串
C.对称正方形
A . A. A. 例题 1 1 1 字符串哈希
分析:
可以直接暴力找 跑的比单哈希还快 可还行.
也可以一个哈希搞完 也可以无错哈希
以及字典树. ( b u s h i (bushi (bushi
暴力CODE:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
//#pragma GCC optimize(2)
#define reg register
using namespace std;
int n,tot;
string x[10005];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
cin>>x[i];
sort(x+1,x+n+1); //字典序排完
for(int i=1;i<=n;i++)
if(x[i]==x[i+1]) tot++;
printf("%d",n-tot); //一共-相同=不同
return 0;
}
单哈希CODE:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
//#pragma GCC optimize(2)
#define reg register
using namespace std;
typedef long long ll;
typedef double db;
const int N=10005;
const int e=131;
const long long p=200709081011;
int n,a[N],ans=1;
string s;
int locate(string x)
{
int len=x.length();
int tot=0;
for(int i=0;i<len;i++)
tot=(tot*e+(int)x[i])%p; //字符串哈希
return tot;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
cin>>s;
a[i]=locate(s);
}
sort