当前位置: 首页 > news >正文

免费小程序模板/windows优化大师要钱

免费小程序模板,windows优化大师要钱,专门做旅游保险的网站,网站首页置顶是怎么做字符串哈希 传送门 核心思想:将字符串看成P进制数,P的经验值是131或13331,取这两个值的冲突概率低 小技巧:取模的数用2^64,这样直接用unsigned long long存储,溢出的结果就是取模的结果typedef unsigned …

字符串哈希

传送门

核心思想:将字符串看成P进制数,P的经验值是13113331,取这两个值的冲突概率低
小技巧:取模的数用2^64,这样直接用unsigned long long存储,溢出的结果就是取模的结果typedef unsigned long long ULL;
ULL h[N], p[N]; // h[k]存储字符串前k个字母的哈希值, p[k]存储 P^k mod 2^64// 初始化
p[0] = 1;
for (int i = 1; i <= n; i ++ )
{h[i] = h[i - 1] * P + str[i];p[i] = p[i - 1] * P;
}// 计算子串 str[l ~ r] 的哈希值
ULL get(int l, int r)
{return h[r] - h[l - 1] * p[r - l + 1];
}

力扣题目

1044. 最长重复子串 - 力扣(LeetCode)

class Solution {static const int N = 4e4;
public:typedef unsigned long long ull;ull h[N], p[N];int start;int n;int P = 131;ull get_hash(int l, int r){return h[r] - h[l - 1] * p[r - l + 1];}string longestDupSubstring(string s) {//很容易想到的思路是求解每段区间的最长前后缀//但是kmp算只能求开头到任意位置的next,解决这个问题是n^2的复杂度//看到数据范围很容易想到二分,当时只想怎么用kmp实现了,忘了字符串匹配的另一种方式,hashstringn = s.size();p[0] = 1;for(int i = 1; i <= n; i ++ ){h[i] = h[i - 1] * P + s[i - 1];p[i] = p[i - 1] * P;}int l = 0, r = N;string res;while(l <= r)//二分长度,复杂度为nlogn{int mid = (l + r) / 2;if(check(mid)){l = mid + 1;res = s.substr(start - 1, mid);}else r = mid - 1;}return res;}bool check(int len){unordered_map<ull, bool> mp;//记录出现过的字符串,若有相同长度相同值得字符串,那么就是重复子串for(int i = 1; i + len - 1 <= n; i ++ ){ull cnt = get_hash(i, i + len - 1);if(mp[cnt]){start = i;return true;}mp[cnt] = true;}return false;}
};

686. 重复叠加字符串匹配 - 力扣(LeetCode)

class Solution {
public:typedef unsigned long long ull;ull P = 131;string s;ull h[40010], p[40010];ull get(int l, int r){return h[r] - h[l - 1] * p[r - l + 1];}int repeatedStringMatch(string a, string b) {string s;int res = 0;int n = a.size(), m = b.size();while(s.size() < b.size()){s.append(a);res ++;}s.append(a);s.append(b);int len = s.size();cout << len;p[0] = 1;for(int i = 1; i <= len; i ++ ){h[i] = h[i - 1] * P + s[i - 1];p[i] = p[i - 1] * P;}int index = -1;ull target = get(len - m + 1, len);for(int i = 1; i + m - 1 <= len - m; i ++ ){if(target == get(i, i + m - 1)){index = i;break;}}if(index == -1) return -1;return index <= len - m - n - m + 1 ? res : res + 1;}
};
http://www.jmfq.cn/news/5029111.html

相关文章:

  • 抖音网络工作室/宁波seo在线优化哪家好
  • 制作网站需要用什么软件/谷歌关键词搜索工具
  • 开源saas多用户建站系统/全网引流推广
  • 建设个网站需要什么/线上推广策划方案范文
  • 公司做网站 微信平台/推广app
  • 阳光保险官方网站/制作网页链接
  • 做教育网站挣钱/网络推广怎么赚钱
  • 管理咨询公司项目运作流程图/宁波企业seo服务
  • 遵义做网站公司/上海seo有哪些公司
  • 中国数据域名注册/点金推广优化公司
  • wordpress 活动网站/北京网络推广
  • 网站电线电话图怎么做/网络销售网站
  • 找人做菠菜网站需要多少钱/汕头网站建设优化
  • 湛江网站制作系统/长春网站建设模板
  • 做网站的人多吗/首页
  • 阿里巴巴网站如何做免费推广/seo项目经理
  • 做那种网站受欢迎/如何在百度上添加自己的店铺
  • 网站建设营销型/win7优化大师
  • 免费教育网站建设/网站seo好学吗
  • 网站哪个公司做的比较好/谷歌推广运营
  • 为什么不用h5做网站/51链
  • 北京人民政府门户网站/网络推广怎么做才有效
  • 钓鱼网站排名假冒建设银行最多/百度秒收录软件工具
  • 专教做美食的网站/公司网站注册流程和费用
  • python网站开发快吗/近期的重大新闻
  • 国外html5做的音乐网站/百度会员登录入口
  • 高端网站定制开发深圳/seo整站网站推广优化排名
  • 深圳做网站 汉狮网络/百度搜索推广技巧
  • 做哪类视频网站需要视频证书/微信营销软件群发
  • 互动网站/注册推广赚钱一个10元