题目地址:

https://leetcode.com/problems/longest-repeating-substring/

给定一个长nnn字符串sss,求其最长重复子串的长度。

思路是二分 + 字符串哈希。二分答案,答案的范围是[1,n−1][1,n-1][1,n−1],而判断sss是否含一个长kkk的重复子串是容易的,只需看一下所有长kkk子串的哈希值是否有重复出现的即可,这可以用Rolling Hash的技巧。代码如下:

class Solution {public:using UL = unsigned long;int longestRepeatingSubstring(string s) {int n = s.size(), l = 1, r = n - 1;if (l > r) return 0;UL P = 131;auto check = [&](int len) {unordered_set<UL> st;UL pow = 1, ha = 0;for (int i = 0; i < len; i++) {pow = pow * P;ha = ha * P + s[i];}st.insert(ha);for (int i = len; i < n; i++) {ha = ha * P + s[i];ha -= pow * s[i - len];if (st.count(ha)) return true;st.insert(ha);}return false;};while (l < r) {int mid = l + (r - l + 1 >> 1);if (check(mid))l = mid;elser = mid - 1;}return check(l) ? l : 0;}
};

时间复杂度O(nlog⁡n)O(n\log n)O(nlogn),空间O(n)O(n)O(n)。

【Leetcode】1062. Longest Repeating Substring相关推荐

  1. 【LeetCode】3. Longest Substring Without Repeating Characters

    题目: Given a string, find the length of the longest substring without repeating characters. Examples: ...

  2. 【LeetCode】15.Longest Common Prefix

    Write a function to find the longest common prefix string amongst an array of strings. 从字符数组的第一项往后挨个 ...

  3. 【Leetcode】2246. Longest Path With Different Adjacent Characters

    题目地址: https://leetcode.com/problems/longest-path-with-different-adjacent-characters/ 给定一棵 n n n个节点的有 ...

  4. 【leetcode】521. Longest Uncommon Subsequence I

    题目如下: 解题思路:本题有点意思.首先如果输入的两个字符串都为空,那么结果是-1:如果两个字符串长度不一样,那么结果是较长的字符串的长度,因为较长的字符串肯定是自身的子序列,但一定不是较短的字符串的 ...

  5. 【LeetCode】1655. Distribute Repeating Integers 分配重复整数

    一题多解. 首先理解问题,可以抽象为: 有若干物品,大小分别为quantity[i]. 假如某个数字重复x次,可理解为有一个容量为x的背包 要把物品放进背包里,问能不能放完 DFS 暴力解法,直接遍历 ...

  6. 【LeetCode】【HOT】297. 二叉树的序列化与反序列化(BFS)

    [LeetCode][HOT]297. 二叉树的序列化与反序列化 文章目录 [LeetCode][HOT]297. 二叉树的序列化与反序列化 package hot;import java.util. ...

  7. 【LeetCode】【HOT】76. 最小覆盖子串(滑动窗口)

    [LeetCode][HOT]76. 最小覆盖子串 文章目录 [LeetCode][HOT]76. 最小覆盖子串 package hot;public class Solution76 {public ...

  8. 【LeetCode】剑指 Offer 37. 序列化二叉树

    [LeetCode]剑指 Offer 37. 序列化二叉树 文章目录 [LeetCode]剑指 Offer 37. 序列化二叉树 package offer;import java.util.Link ...

  9. 【LeetCode】剑指 Offer 58 - II. 左旋转字符串

    [LeetCode]剑指 Offer 58 - II. 左旋转字符串 文章目录 [LeetCode]剑指 Offer 58 - II. 左旋转字符串 一.字符串切片 二.列表遍历拼接 三.字符串遍历拼 ...

最新文章

  1. C++的STL队列实现栈
  2. Zookeeper 生产实践的一些经验分享
  3. LeetCode 100相同的树101对称二叉树
  4. AAAI 2021 | 基于动态混合关系网络的对话式语义解析方法
  5. Mint-Ui的mt-search点击选中
  6. (1)Deep Learning之感知器
  7. Python3.6读写串口操作
  8. acm常见错误-持续更新
  9. uiswitch样式_iOS - UISwitch 、UISegmentedControl
  10. Xcode打包后,找不到dSYM文件
  11. PHP第一季视频教程.李炎恢.学习笔记(五)(第3章 操作符与控制结构(1)(2))
  12. 学生信息管理系统(数据库)
  13. 快速排序(萝卜填坑算法)【必会知识】
  14. qlv转mp4失败 解决方法
  15. 【Node.js】关于Node.js接口的详解和案例--restful风格接口。案例:添加商品接口,添加员工接口,删除员工接口
  16. 解决电脑无法通过网线直连海康摄像机的问题
  17. 使用print.js进行分页打印
  18. 分享10个实用的软件和网站,我每天都在用
  19. Roberts边缘检测算子
  20. 计算机知识传播策划书,关于计算机知识活动的策划书

热门文章

  1. 终于会给2612A硒鼓加粉了
  2. iPhone 手机官方查询网站
  3. 我应该选一所什么学校--所有选择,都应基于你的需要
  4. 行人检测-LUV颜色空间
  5. 计算机策略编辑器,组策略编辑器,小编教你组策略编辑器怎么打开
  6. 笔记本计算机无法启动怎么解决,笔记本突然无法开机的原因_笔记本突然关机无法开机怎么解决-win7之家...
  7. android简单歌词,《Android_MP3播放器(初学简单版_歌名、歌手、歌词同步显示)》.doc...
  8. 苹果Macbook经常死机怎么办?
  9. 转:80%的人没有真正参与组织工作,你还在专制管理吗?
  10. html光标自动定位到文本框,html元素contenteditable属性如何定位光标和设置光标