美文网首页
最长重复子串

最长重复子串

作者: xialu | 来源:发表于2021-12-23 21:54 被阅读0次

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-duplicate-substring

题目描述:

给你一个字符串 s ,考虑其所有 重复子串 :即,s 的连续子串,在 s 中出现 2 次或更多次。这些出现之间可能存在重叠。
返回 任意一个 可能具有最长长度的重复子串。如果 s 不含重复子串,那么答案为 "" 。

示例 1:

输入:s = "banana"
输出:"ana"

示例 2:

输入:s = "abcd"
输出:""

代码实现:
class Solution {
    long[] h, p;
    public String longestDupSubstring(String s) {
        int P = 1313131;
        int n = s.length();
        h = new long[n + 10];
        p = new long[n + 10];
        p[0] = 1;
        for (int i = 0; i < n; i++) {
            p[i + 1] = p[i] * P;
            h[i + 1] = h[i] * P + s.charAt(i);
        }
        String ans = "";
        int l = 0, r = n;
        while (l < r) {
            int mid = l + r + 1 >> 1;
            String t = check(s, mid);
            if (t.length() != 0) l = mid;
            else r = mid - 1;
            ans = t.length() > ans.length() ? t : ans;
        }
        return ans;
    }

    public String check(String s, int len) {
        int n = s.length();
        Set<Long> set = new HashSet();
        for (int i = 1; i + len - 1 <= n; i++) {
            int j = i + len - 1;
            long cur = h[j] - h[i - 1] * p[j - i + 1];
            if (set.contains(cur)) return s.substring(i - 1, j);
            set.add(cur);
        }
        return "";
    }
}

相关文章

  • 【leetcode3】 3. Longest Substrin

    关键字:最长不重复子串、双指针 难度:Medium 题目大意:求一个字符串最长不重复子串的长度 题目: Given...

  • LeetCode #1044 Longest Duplicate

    1044 Longest Duplicate Substring 最长重复子串 Description:Given...

  • 3、Longest SubString Without Repe

    Examples:找出最长无重复子串长度Given "abcabcbb", the answer is "abc"...

  • iOS面试题汇总---算法类

    字符串 【3】最长回文子串 【3】最长无重复子串 【1*】字符串转数字 【4】KMP 算法 【2】字符串全排列 【...

  • 最长不重复子串

    1. 问题定义 最长不重复子串:一个字符串中最长的没有重复字符的子串。举个? : abcabcbb 最长子串 a...

  • 寻找最长重复子串,后缀数组的方法

    寻找最长重复子串,如ask not what your country can do for you ,but w...

  • 文章收藏

    iOS面试题系列之常见算法 排序算法整理 字符串【3】最长回文子串【3】最长无重复子串【1*】字符串转数字【4】K...

  • 3、Longest Substring Without Repe

    题设 要点 双指针维护最长重复子串的位置 动态规划 寻找字符串的最长子串,就是要维护一个区间[left , rig...

  • 无重复字符串的最长子串

    题目大意:给定一个字符串,找出不含有重复字符的最长子串的长度 解读: 1、给定abcabcbb,没有重复子串的最长...

  • 最长重复子串

    前言 据统计,在所有程序中,关于字符串处理的程序占到了百分之八十以上,所以关于字符串处理的算法十分多,而且关于数字...

网友评论

      本文标题:最长重复子串

      本文链接:https://www.haomeiwen.com/subject/krykqrtx.html