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

DS应用—最长重复子

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

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

最长不重复子的有趣解法

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

12200

查找最大不重复子的长度

查找最大不重复子长度是一个常见的字符处理问题,有多种解决思路。...通过两个指针start和end控制窗口的范围,动态调整窗口的大小,以找到最大不重复子。 O(n),每个字符最多被访问两次,一次是窗口扩展,一次是窗口收缩。...动态规划 使用动态规划数组dp,其中dp[i]表示以字符s[i]结尾的最长不重复子的长度。通过状态转移方程更新dp[i],并维护一个变量记录最大长度。...下面以滑动窗口为例,介绍下如何通过滑动窗口来查找最大不重复子长度,该方法是一种有效的解决子问题的策略。...:%d\n", result)}在这个示例中,lengthOfLongestSubstring函数接收一个字符作为输入,返回该字符中最大不重复子的长度。

9210

查找最大不重复子的长度

查找最大不重复子长度是一个常见的字符处理问题,有多种解决思路。...通过两个指针start和end控制窗口的范围,动态调整窗口的大小,以找到最大不重复子。 O(n),每个字符最多被访问两次,一次是窗口扩展,一次是窗口收缩。...动态规划 使用动态规划数组dp,其中dp[i]表示以字符s[i]结尾的最长不重复子的长度。通过状态转移方程更新dp[i],并维护一个变量记录最大长度。 O(n),需要遍历整个字符。...下面以滑动窗口为例,介绍下如何通过滑动窗口来查找最大不重复子长度,该方法是一种有效的解决子问题的策略。...:%d\n", result) } 在这个示例中,lengthOfLongestSubstring函数接收一个字符作为输入,返回该字符中最大不重复子的长度。

10110

LeetCode - #3 最长未重复子字符

描述 给定一个字符 s , 找出最长未重复的子字符的长度。 2. 示例 示例 1 输入:s = "abcabcbb" 输出:3 解释:最长未重复子字符答案是"abc",长度为 3。...示例 2 输入:s = "bbbbb" 输出:1 解释:最长未重复子字符答案是"b",长度为 1。...示例 3 输入:s = "pwwkew" 输出:1 解释:最长未重复子字符答案是"wke",长度为 3。注意答案必须是子字符,“pwke” 是一个子列,而不是一个子字符。...maxLen = max(maxLen, i - startIdx + 1) } return maxLen } } 主要思想:使用字典存储非重复子字符的下一个可能有效字符的位置...,然后迭代字符更新 maxLen、dictionary 和遇到重复时的 startIdx。

47720

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

最长重复子数组 题目链接: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]推出。

52910
领券