Questions tagged «strings»

有关符号序列,符号集及其属性以及用途的问题。

1
寻找最长的重复子序列
给定字符串,我想找到最长的重复(至少两次)子序列。也就是说,我想找到一个字符串,它是的子序列(不一定是连续的),使得。也就是说,是一个字符串,其一半连续出现两次。请注意,是的子序列,但不一定是子字符串。ssswwwsssw=w′⋅w′w=w′⋅w′w=w' \cdot w' wwwwwwsss 例子: 对于“ ababccabdc”,它将是“ abcabc”,因为“ abc” =“ abc”和“ abc”在“ ababccabdc”中(至少)出现了两次(至少)。 对于“ addbacddabcd”,一个选项为“ dddd”,因为“ dd”出现两次(我不能多次使用相同的字母,但是这里我有4个“ d”,所以还可以),但其值为4。我可以找到更好的一个长度8:“ abcdabcd”,因为“ abcd”是“ addbacddabcd”的子字符串,该子字符串出现两次。 我有兴趣找到最长的重复子序列。这也称为“找到最长/最大的平方”,但我读过许多文章,其中为子字符串而不是子序列定义了平方。 我可以轻松地使用蛮力算法,该算法通过迭代字符串中的断点的所有选项来获取,然后我将在两个字符串中寻找最大/最长的公共子序列,但是使用动态编程技术每次检查将花费,因此整个时间将是。我发现了最长公共子序列更有效的算法,该算法采用,因此运行时间将为。O(n3)O(n3)O(n^3)O(n2)O(n2)O(n^2)O(n3)O(n3)O(n^3)O(n2logn)O(n2log⁡n)O(\frac{n^2}{\log n})O(n3logn)O(n3log⁡n)O(\frac{n^3}{\log n}) 我正在寻找一种更有效的算法来解决最长重复子序列问题。也许我对所有断点进行迭代的想法浪费了太多时间,并且可以减少为更少的迭代。或者也许以不同的态度解决这个问题。 我搜索了许多期刊和以前的问题,发现的大多数结果都与子字符串有关,而不是与子序列有关。 我还读到可以使用后缀树来完成此操作,但这也与子字符串有关,我不确定是否可以将这种想法扩展到子序列。 我正在寻找可以在时间中运行的解决方案。如果在时间上存在一个会更好(我不确定是否存在)。O(n2)O(n2)O(n^2)O(n⋅logn)O(n⋅log⁡n)O(n \cdot \log n)

1
给定n个字符串,其中一个是另一个的子字符串吗?
假设我们得到了字符串的集合。我想知道这些字符串中的任何一个是否是集合中任何其他字符串的子字符串。换句话说,我想要一种用于以下任务的算法:ññn小号1个,… ,Sñ小号1个,…,小号ñS_1,\dots,S_n 输入:小号1个,… ,Sñ小号1个,…,小号ñS_1,\dots,S_n 输出:使得是和的子字符串,或者如果不存在这样的则为None我,Ĵ一世,Ĵi,j小号一世小号一世S_i小号Ĵ小号ĴS_ji ≠ j一世≠Ĵi\ne j我,Ĵ一世,Ĵi,j 是否有一种有效的算法? 如果将“子字符串”替换为“前缀”,则存在一种有效的算法(对字符串进行排序,然后进行线性扫描以比较相邻的字符串;排序将确保子字符串相邻)。但是测试任何字符串是否为其他字符串的子字符串似乎更具挑战性。一个朴素的算法是遍历所有对,但这需要子字符串测试。有没有更有效的算法?我,Ĵ一世,Ĵi,jΘ (n2)Θ(ñ2)\Theta(n^2) 我猜我们可以称其为“所有对子字符串测试”或类似的名称。 我的最终目标是修剪集合,以便通过删除集合中其他子字符串的每个子字符串,使任何字符串都不是其他子字符串。

1
查找字符串中最长的重复模式
我正在寻找一种有效的算法来查找字符串中最长的重复模式。 例如,考虑以下数字字符串: 5431428571428571428571428571427623874534。 如您所见,142857142857是最长的模式,它在此字符串中重复了两次(至少两次)。 重复的字符串不应该包含任何想法,而应该不是蛮力的?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.