HASH求两子串是否相等(O(N)预处理O(1)比较)
来源:互联网 发布:mac os x 10.12 beta5 编辑:程序博客网 时间:2024/06/03 15:46
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <string>using namespace std;const int MAXN = 5010;const unsigned long long SEED = 13331;unsigned long long P[MAXN];unsigned long long S[MAXN];unsigned long long RS[MAXN];string s;int n;unsigned long long HS( int l, int r ){//正向 if( l == r ){ return s[l]; } l++; r++; return S[r] - S[l-1] * P[r-l+1];}unsigned long long RHS( int l, int r ){//反向 if( l == r ){ return s[l]; } l = n - l - 1; r = n - r - 1; swap( l, r ); l++; r++; return RS[r] - RS[l-1] * P[r-l+1];}int main(){ cin >> s; P[0] = 1; for( int i = 1; i < MAXN; i++ ){ P[i] = P[i-1] * SEED; } n = s.size(); for( int i = 1; i <= n; i++ ){ S[i] = S[i-1] * SEED + s[i-1]; } for( int i = 1; i <= n; i++ ){ RS[i] = RS[i-1] * SEED + s[n-i]; } cout << (HS(0,3 ) == HS( 6,9 )) << endl; return 0;}
阅读全文
0 0
- HASH求两子串是否相等(O(N)预处理O(1)比较)
- O(n)预处理C(n,m)
- o(1), o(n), o(logn), o(nlogn)
- 把单链表按某值划分成左边小,中间相等,右边大的形式,时间O(n),空间O(1)
- O(n)
- 时间复杂度:O(1)、O(n)、O(n²)、O(nlogn)等是什么意思,白话文解释专业术语。
- 算法时间复杂度的表示法O(n²)、O(n)、O(1)、O(nlogn)
- POJ--3697[USTC campus network] BFS+hash(O(N^2))
- leetcode: two sum, hash search solution, java. O(n)
- leetcode: add two numbers , hash search solution, java. O(n)
- 欧拉函数表的O(NloglogN)和O(N)预处理
- 检查元素1-n中是否有相同的元素,o(n)复杂度
- O(n^1/2) isPrime
- 如何判断一个整数数组中是否有重复元素?要求时间复杂度O(n),空间复杂度O(1)
- 如何判断一个整数数组中是否有重复元素?要求时间复杂度O(n),空间复杂度O(1)
- 如何判断一个整数数组中是否有重复元素?要求时间复杂度O(n),空间复杂度O(1)
- 比较字符串是否相等
- 比较字符串是否相等
- Java网络03 Servlet沙拉
- HDU
- Android之第三方登录分享封装
- Key Set 【hdu-5363】【快速幂】
- 斯坦福机器学习2:SVM支持向量机的通俗理解
- HASH求两子串是否相等(O(N)预处理O(1)比较)
- Paint 使用
- 游戏策划学习站点
- 微信开发第一步,引入微信api
- 华为手机android studio调试信息LogCat不显示问题解决办法
- Leetcode-Permutation(next_permutation或者深搜)
- Linux arm 3.6.0kernel Configuration的menuconfig
- linux实验楼学习笔记1
- 从零开始搭建环境编写操作系统 AT&T GCC (七)GDB调试和-monitor