leetcode 1044. Longest Duplicate Substring | 1044. 最长重复子串(Rabin Karp算法)
题目
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 动态规划 马拉车算法】LeetCode 5. Longest Palindromic Substring
LeetCode 5. Longest Palindromic Substring LeetCode中与回文串相关的免费的题目共有15道(5, 9, 125, 131, 132, 214, 234, ...
- LeetCode 1062. 最长重复子串(二分查找)
文章目录 1. 题目 2. 解题 1. 题目 给定字符串 S,找出最长重复子串的长度.如果不存在重复子串就返回 0. 示例 1: 输入:"abcd" 输出:0 解释:没有重复子串. ...
- 最长重复子串(Rabin-Karp算法)
目录 最长重复子串 C++代码 最长重复子串 1044. 最长重复子串 给出一个字符串 S,考虑其所有重复子串(S 的连续子串,出现两次或多次,可能会有重叠). 返回任何具有最长可能长度的重复子串.( ...
- 最长重复子串和最长不重复子串求解
最长重复子串和最长不重复子串求解 本文内容框架: §1 最长重复子串 基本方法.KMP算法求解.后缀数组求解 §2 最长不重复子串 基本方法.动态规划.动态规划+Hash §3 小结 §1最长重复子串 ...
- 动态规划与最长重复子串 LRS and Dynamic Programming
目录 最长重复子串问题 暴力遍历 动态规划 LRS问题中dp数组的意义 重叠问题 暴力遍历 dp解法 一些想法 动态规划和哈希表? s.substr()的时间复杂度? 碎碎念 最长重复子串问题 假设我 ...
- 后缀数组求最长重复子串
问题描述 给定一个字符串,求出其最长重复子串 例如:abcdabcd 最长重复子串是 abcd,最长重复子串可以重叠 例如:abcdabcda,这时最长重复子串是 abcda,中间的 a 是被重叠的. ...
- #1407 : 后缀数组二·重复旋律2 (不可重叠最长重复子串问题)
题目链接 思路 求不可重叠最长重复子串,也可以利用height[i]height[i]height[i]. 二分枚举答案KKK 当height[i]≥Kheight[i] \ge Kheight[i] ...
- 后缀数组--(可重叠最长重复子串问题)
问题描述:给定一个字符串,求最长重复子串,这两个子串可以重叠. 其实问题可以转化为height数组的最大值.至于为什么是这样,我可以这样解释: 求可重叠最长重复子串等价于求两个后缀的最长公共前缀的最大 ...
- 牛客题霸 [最长重复子串] C++题解/答案
牛客题霸 [最长重复子串] C++题解/答案 题目描述 一个重复字符串是由两个相同的字符串首尾拼接而成,例如abcabc便是长度为6的一个重复字符串,而abcba则不存在重复字符串. 给定一个字符串, ...
最新文章
- HDFS的文件副本机制
- HTTP basic auth
- 对datatable类型列名排序_表格数据的排序功能(支持多列)
- WSO2 WSF/CPP 网络服务开发例子1--HELLO
- Java概 述(新手专区)
- windows平台上编写的python无法在unix_在Windows平台上编写的Python程序无法在Unix平台运行?...
- Android设备研发术语表
- excel模板 基金账本_有哪些好用的Excel个人账单模板?
- vmware10密钥
- PV、EV、AC、BAC、EAC、ETC等的含义及计算公式
- 苹果手机铃声制作教程
- 一条挨踢老狗的2017年终总结
- 数据挖掘十大算法之决策树详解(2)
- 找工作经验贴----转自cc98 (作者ID:qzz88 ) 仅为收藏,感谢原作者的经验分享
- (附源码)ssm考生评分系统 毕业设计 071114
- 安卓中为了获取context的方法和区别(getContext,getActivity,this,mainActivity.this等)
- SPOJ694 SPOJ705 ——不同子串的总数
- EXCEL VBA基础:通过创建模块完成简单SUB过程
- 字符设备驱动基础-linux驱动开发第2部分-朱有鹏-专题视频课程
- 储存quill与php,import – 在扩展Quill方面遇到问题