首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

DS应用—最长重复子

题目描述 求最长重复子长度(子不重叠)。例如:abcaefabcabc的最长重复子abca,长度为4。...输入 测试次数t t个测试 输出 对每个测试,输出最长重复子长度,若没有重复子,输出-1....它的next值非常有用,有个子循环定理: 定理:假设S的长度为len,则S存在循环子,当且仅当,len可以被len - next[len]整除,最短循环子为S[len - next[len]]。...但是我做这道题的时候还没有想那么多,我直接暴力解决…… 我直接两个循环去找最长的子,外循环固定子的起始位置,内循环控制子的终止位置,记录每次子的长度,之后输出最长的长度。...这里的生成子的函数substr的参数是起始位置和选取的数目,而不是起始位置和终止位置。

25820

最长重复子

System.out.println(maxLength1(num));     }     /**      * 方案二      * 原理:      * 当某个数在之前出现过,这个时候就把子的起点...到第二个3时,以后的子串起点start为4,      * 到第二个1时,如果取最大的start,按start = map.get(arr[end])+1      * 算出起点start为2,显然以起点...start=2,结尾end=1的子234351有重复的,      * 因此start要取最大的      * 优点:对于方案一,少了一些对于list的截取与搜索的步骤,相对儿研会少一点操作,应该会节约点时间...        for (int number : arr) {             if (list.contains(number)) {                 //subList的截取包含最后一位

30310
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    最长重复子的有趣解法

    最长重复子是leetcode一道经典的题目,要求找出一个字符最长重复子的长度首先清楚一个概念,子是连续的字符组成的,子序列是连续的字符组成的。)...常规做法一种常规的想法就是以每个字符作为起始点,查找以这个字符开始的最长,然后输出最大的长度,这种做法需要两层循环,第一层循环是起始字符 s[i],第二层循环是以第一层起始字符后的第一个字符开始 s...[j],如果 s[j] 出现在子 s[i, j] 中,则以 s[i] 开头的最长重复子长度就是 j - i。...滑动窗口法的思想是一层循环,每次循环找到以这个字符为结尾的子,具体做法就是:外层循环遍历所有字符,初始化窗口两边都为 0,建立一个 hashmap 用于记录当前窗口字符出现次数。...如果当前字符没有出现过,则以当前右边窗口所在字符为结尾的不重复子就是窗口的长度。判断当前长度和已有记录长度,选择最大长度,右边窗口继续右移,考察下一个字符。

    16500

    LeetCode - #3 最长重复子字符

    微博:@故胤道长[1])的 Swift 算法题题解整理为文字版以方便大家学习与阅读。...该算法题解的 github 仓库地址是:https://github.com/soapyigu/LeetCode-Swift[2] 积跬步,无以至千里;积小流,无以成江海。 1....描述 给定一个字符 s , 找出最长未重复的子字符的长度。 2. 示例 示例 1 输入:s = "abcabcbb" 输出:3 解释:最长重复子字符答案是"abc",长度为 3。...示例 2 输入:s = "bbbbb" 输出:1 解释:最长重复子字符答案是"b",长度为 1。...示例 3 输入:s = "pwwkew" 输出:1 解释:最长重复子字符答案是"wke",长度为 3。注意答案必须是子字符,“pwke” 是一个子列,而不是一个子字符

    50120

    leetcode最长回文子_最长回文子算法

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 给定一个仅包含小写字母的字符,求它的最长回文子的长度。...所谓回文,指左右对称的字符。...所谓子,指一个字符删掉其部分前缀和后缀(也可以不删)的字符 (注意:记得加上while处理多个测试用例) 输入描述: 输入一个仅包含小写字母的字符 输出描述: 返回最长回文子的长度 示例: 输入...: cdabbacc 输出: 4 说明: abba为最长的回文子 解题思路: 这题用双循环解决。...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    79720

    动态规划:最长重复子数组

    最长重复子数组 题目链接:https://leetcode-cn.com/problems/maximum-length-of-repeated-subarray/ 给两个整数数组 A 和 B ,返回两个数组中公共的...这种问题动规最拿手,动规五部曲分析如下: 确定dp数组(dp table)以及下标的含义 dp[i][j] :以下标i - 1为结尾的A,和以下标j - 1为结尾的B,最长重复子数组长度为dp[i][j...那有同学问了,我就定义dp[i][j]为 以下标i为结尾的A,和以下标j 为结尾的B,最长重复子数组长度。不行么? 行倒是行!但实现起来就麻烦了一些,大家看下面的dp数组状态图就明白了。...718.最长重复子数组 以上五部曲分析完毕,C++代码如下: class Solution { public: int findLength(vector& A, vector<int...718.最长重复子数组 我们可以看出dp[i][j]都是由dp[i - 1][j - 1]推出。那么压缩为一维数组,也就是dp[j]都是由dp[j - 1]推出。

    55610

    扩展kmp求最长回文子_算法-字符最长回文子

    上一篇KMP算法之后好几天都没有更新,今天介绍最长回文子。 首先介绍一下什么叫回文,就是正着读和倒着读的字符顺序都是一样的,eg:level,noon。...求解的常规思想,就是先求出主的所有子,在判断是否是回文,然后选出最长的,这一种方法的时候复杂度较高,是O(n^3),所以一般采用这种方法,下面介绍两种方法求解。 1....算法思想:把主中的每一个字符当做回文的中心,向两边扩展,求出最长的回文子。其中要注意奇数位的回文子和偶数位的回文子的区别。eg:aba的中心是b,而abba的中心应该是bb。...代码 核心算法是l2r的部分,以传入的mid为回文的中心计算最长的回文子,其中需要注意的地方有两点: l2r中的第一个while循环,之前提到过要注意奇数位的回文和偶数位的回文,在代码中,判断中心点的字符和右边的字符是否相等...算法思想:Manacher采用从中间向两边遍历得到最长回文子的思想,将原来的主进行扩展,这个算法严格要求对称,只允许有一个中心点。

    82420

    算法沉淀】最长回文子

    最长回文子 提示 给你一个字符 s,找到 s 中最长的回文 子 。 如果字符的反序与原始字符相同,则该字符称为回文字符。...示例 2: 输入:s = "cbbd" 输出:"bb" 提示: 1 <= s.length <= 1000 s 仅由数字和英文字母组成 题目解析: 给定一个字符s,需要找到s中最长的回文子。...回文字符是指正序和反序都相同的字符。 思路如下: 初始化两个指针left和right,分别表示当前考虑的子的左右边界。初始时,left=0,right=0。...使用一个变量max_len来记录最长回文子的长度,初始值为0。同时使用一个变量start来记录最长回文子的起始位置,初始值为0。 使用两层循环来枚举所有可能的子。...如果p1和p2指向的字符不同,则说明该子不是回文。 在遍历完所有子后,最长回文子的起始位置为start,长度为max_len。

    7410

    【字符最长回文子 ( 蛮力算法 )

    文章目录 一、回文、子、子序列 二、最长回文子 1、蛮力算法 2、时间复杂度最优方案 一、回文、子、子序列 ---- " 回文 ( Palindrome ) " 是 正反都一样的字符...: https://www.lintcode.com/problem/200/description 给出一个字符(假设长度最长为1000),求出它的最长回文子,你可以假定只有一个满足条件的最长回文...1、蛮力算法 蛮力算法 : ① 先获取所有的子 ; 嵌套两层循环 , 外层循环起点索引 , 内层循环终点索引 , 将 \cfrac{n(n+1)}{2} +1 个子都遍历出来 ; 该操作是 O...(n^2) 的算法复杂度 ; ② 验证子是否是回文 ; 使用 相向双指针算法 , 设置两个指针 , 左指针指向字符开始位置 , 右指针指向字符结束位置 , 对比左右指针是否相等 , 如果相等..., 耗时较长 ; 2、时间复杂度最优方案 时间复杂度最优方案 : Manacher 算法 可以在 O(n 时间内获得最长回文 , 这是时间复杂度最优方案 , 但是属于背诵问题 ; 一般面试侧重与逻辑与编程能力

    95620
    领券