题目

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

题解

这题暴力超时,看了 Related Topics,以及 Hint,主要用到 Rolling Hash,算法叫Rabin Karp,实现上参考:https://leetcode.com/problems/longest-duplicate-substring/discuss/1132925/JAVA-Solution

class Solution {public static final int MUL = 31;public String longestDupSubstring(String str) {int L = 0;int R = str.length();String result = "";while (L < R) {int M = (L + R) / 2; // M is lengthif (M == 0) break;HashSet<Long> seen = new HashSet<>();long hash = initHash(str.substring(0, M));seen.add(hash);long pow = 1;for (int l = 1; l < M; l++) pow *= MUL;for (int i = 1; i <= str.length() - M; i++) {hash = rollingHash(pow, hash, str, i, i + M - 1);if (seen.contains(hash)) {result = str.substring(i, i + M);}seen.add(hash);}if (result.length() == M) L = M + 1;else R = M;}return result;}public long initHash(String s) {long hash = 0;long mul = 1;for (int i = s.length() - 1; i >= 0; i--) {hash += s.charAt(i) * mul;mul *= MUL;}return hash;}public long rollingHash(long pow, long hash, String s, int i, int j) {return (hash - s.charAt(i - 1) * pow) * MUL + s.charAt(j);}
}

leetcode 1044. Longest Duplicate Substring | 1044. 最长重复子串(Rabin Karp算法)相关推荐

  1. 【回文串1 动态规划 马拉车算法】LeetCode 5. Longest Palindromic Substring

    LeetCode 5. Longest Palindromic Substring LeetCode中与回文串相关的免费的题目共有15道(5, 9, 125, 131, 132, 214, 234, ...

  2. LeetCode 1062. 最长重复子串(二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 给定字符串 S,找出最长重复子串的长度.如果不存在重复子串就返回 0. 示例 1: 输入:"abcd" 输出:0 解释:没有重复子串. ...

  3. 最长重复子串(Rabin-Karp算法)

    目录 最长重复子串 C++代码 最长重复子串 1044. 最长重复子串 给出一个字符串 S,考虑其所有重复子串(S 的连续子串,出现两次或多次,可能会有重叠). 返回任何具有最长可能长度的重复子串.( ...

  4. 最长重复子串和最长不重复子串求解

    最长重复子串和最长不重复子串求解 本文内容框架: §1 最长重复子串 基本方法.KMP算法求解.后缀数组求解 §2 最长不重复子串 基本方法.动态规划.动态规划+Hash §3 小结 §1最长重复子串 ...

  5. 动态规划与最长重复子串 LRS and Dynamic Programming

    目录 最长重复子串问题 暴力遍历 动态规划 LRS问题中dp数组的意义 重叠问题 暴力遍历 dp解法 一些想法 动态规划和哈希表? s.substr()的时间复杂度? 碎碎念 最长重复子串问题 假设我 ...

  6. 后缀数组求最长重复子串

    问题描述 给定一个字符串,求出其最长重复子串 例如:abcdabcd 最长重复子串是 abcd,最长重复子串可以重叠 例如:abcdabcda,这时最长重复子串是 abcda,中间的 a 是被重叠的. ...

  7. #1407 : 后缀数组二·重复旋律2 (不可重叠最长重复子串问题)

    题目链接 思路 求不可重叠最长重复子串,也可以利用height[i]height[i]height[i]. 二分枚举答案KKK 当height[i]≥Kheight[i] \ge Kheight[i] ...

  8. 后缀数组--(可重叠最长重复子串问题)

    问题描述:给定一个字符串,求最长重复子串,这两个子串可以重叠. 其实问题可以转化为height数组的最大值.至于为什么是这样,我可以这样解释: 求可重叠最长重复子串等价于求两个后缀的最长公共前缀的最大 ...

  9. 牛客题霸 [最长重复子串] C++题解/答案

    牛客题霸 [最长重复子串] C++题解/答案 题目描述 一个重复字符串是由两个相同的字符串首尾拼接而成,例如abcabc便是长度为6的一个重复字符串,而abcba则不存在重复字符串. 给定一个字符串, ...

最新文章

  1. HDFS的文件副本机制
  2. HTTP basic auth
  3. 对datatable类型列名排序_表格数据的排序功能(支持多列)
  4. WSO2 WSF/CPP 网络服务开发例子1--HELLO
  5. Java概 述(新手专区)
  6. windows平台上编写的python无法在unix_在Windows平台上编写的Python程序无法在Unix平台运行?...
  7. Android设备研发术语表
  8. excel模板 基金账本_有哪些好用的Excel个人账单模板?
  9. vmware10密钥
  10. PV、EV、AC、BAC、EAC、ETC等的含义及计算公式
  11. 苹果手机铃声制作教程
  12. 一条挨踢老狗的2017年终总结
  13. 数据挖掘十大算法之决策树详解(2)
  14. 找工作经验贴----转自cc98 (作者ID:qzz88 ) 仅为收藏,感谢原作者的经验分享
  15. (附源码)ssm考生评分系统 毕业设计 071114
  16. 安卓中为了获取context的方法和区别(getContext,getActivity,this,mainActivity.this等)
  17. SPOJ694 SPOJ705 ——不同子串的总数
  18. EXCEL VBA基础:通过创建模块完成简单SUB过程
  19. 字符设备驱动基础-linux驱动开发第2部分-朱有鹏-专题视频课程
  20. 储存quill与php,import – 在扩展Quill方面遇到问题

热门文章

  1. 牛客 - Prize(bitset优化暴力)
  2. 25.智能指针.rs
  3. 高性能服务器开发-iocp
  4. OD的hit跟踪和run跟踪
  5. mediasoup-demo 运行实战
  6. HTTP/2 流量调试
  7. C语言程序设计 | 整型、浮点型在内存中的存储方式
  8. 送卡神算法力作《代码随想录》!
  9. 设计模式:备忘录模式(Memento)
  10. JAVA运行时异常及检查式异常