如何找到最长的回文子序列?

2024-01-17

问题就在这里(6.7ch6 http://www.cs.berkeley.edu/~vazirani/algorithms/chap6.pdf)来自算法书(Vazirani),与经典问题略有不同找到最长的回文 https://stackoverflow.com/questions/1115001/write-a-function-that-returns-the-longest-palindrome-in-a-given-string。我怎么解决这个问题 ?

一个子序列是回文序列,如果它是 无论从左到右阅读还是 右到左。例如, 顺序

A,C,G,T,G,T,C,A,A,A,A,T,C,G

有许多回文子序列, 包括A,C,G,C,A and A,A,A,A(另一方面,子序列A,C,T不是回文)。设计一个 接受序列的算法x[1 ...n]并返回(的长度) 最长回文子序列。它是 运行时间应该是O(n^2)


这可以使用动态规划在 O(n^2) 内解决。基本上,问题是建立最长的回文子序列x[i...j]使用最长的子序列x[i+1...j], x[i,...j-1] and x[i+1,...,j-1](如果第一个和最后一个字母相同)。

首先,空字符串和单个字符串通常是回文。 请注意,对于子字符串x[i,...,j], if x[i]==x[j],我们可以说最长回文串的长度是最长回文串的长度x[i+1,...,j-1]+2。如果不匹配,则最长回文数是其中的最大值x[i+1,...,j] and y[i,...,j-1].

这给了我们这个函数:

longest(i,j)= j-i+1 if j-i<=0,
              2+longest(i+1,j-1) if x[i]==x[j]
              max(longest(i+1,j),longest(i,j-1)) otherwise

您可以简单地实现该函数的记忆版本,或者编写一个自下而上的最长[i][j]表。

这仅给出最长子序列的长度,而不是实际的子序列本身。但它也可以很容易地扩展来做到这一点。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何找到最长的回文子序列? 的相关文章

  • 稀疏矩阵中的最大和子矩形

    求一个子矩形中的最大和NxN矩阵可以完成O n 3 正如其他帖子中指出的 使用 2 d kadane 算法的时间 然而 如果矩阵是稀疏的 具体来说O n 非零条目 可以O n 3 时间被打败了吗 如果有帮助的话 对于我感兴趣的当前应用程序
  • 交换两个向量之间的值,使两个向量的 max_element 之和最小

    这是 Codechef 的问题 但请耐心等待 https www codechef com ZCOPRAC problems ZCO16001 https www codechef com ZCOPRAC problems ZCO16001
  • 两个非嵌套循环的大 O 表示法

    对于两个非嵌套的 for 循环 大 O 表示法是什么 Example for int i 0 i
  • 在无向图中查找强连通分量

    我想在无向图中找到强连接的组件 即如果我从节点开始A然后我会回到节点A并且每条边都被恰好访问一次 对于有向图可以使用Tarjan算法来寻找强连通分量 但是对于无向图怎么办 我认为您错过了强连通分量的含义 强连接组件 如果所有顶点对之间都存在
  • 按百分比减少多边形面积

    我有一个由点 x y 组成的多边形 我想做的是将其减少一个百分比 请记住 我不想只是扩大规模 多边形应该有一种内部边界 其宽度取决于百分比 该内部边界被多边形切断 谁知道可以实现这一目标的算法 输入 点数组 百分比 输出 点数组 你所寻求的
  • 用 Java 创建迷宫求解算法

    我被分配了用 Java 创建迷宫求解器的任务 这是任务 Write an application that finds a path through a maze The maze should be read from a file A
  • 如何在给定目标索引数组的情况下对数组进行就地排序?

    你如何对给定的数组进行排序arr in place给定目标索引数组ind 例如 var arr A B C D E F var ind 4 0 5 2 1 3 rearrange arr ind console log arr gt B E
  • 如何高效地在屏幕上精确绘制N个点?

    这听起来是一个简单的问题 但我发现要获得良好的性能是非常棘手的 我提出的第一个算法是随机绘制点 从一组中检查是否已绘制 否则绘制 如果我们只绘制几个点 那么这种方法效果很好 但当我们接近填满屏幕时 速度会灾难性地减慢 我想出的最好的方法是构
  • 如何从一组重叠的圆计算多边形集?

    这个问题是一些计算细节的扩展这个问题 https stackoverflow com questions 1667310 combined area of overlapping circles 假设有一组 可能重叠的 圆 并且希望计算这组
  • 如何将无向图转换为 DAG?

    The 维基页面 http en wikipedia org wiki Directed acyclic graph Relation to other kinds of graphs says 任何无向图都可以通过为其顶点选择总顺序并将每
  • 固定大小集以包含给定集的最大数量

    我有大约 1000 组尺寸 1 4 1 3 3 5 6 4 5 6 7 5 25 42 67 100 是否有可能找到包含最大数量的给定集合的大小为 20 的集合 检查每一个100 80 20 集 效率低下 我不太确定这是 NP 完全的 考虑
  • 找到一系列间隔的最有效分组

    我有一个应用程序 其中有一系列不重叠的固定宽度间隔 每个间隔都有一个给定的键 每个间隔具有相同的宽度 并且可以存在连续的间隔 本质上 我想以最小化单独间隔的数量的方式对间隔和键进行分组 这可以通过合并具有相同键的连续间隔或查找匹配间隔并将它
  • 在 C++ 中通过引用传递 std 算法谓词

    我正在尝试从 a 中删除元素std list并保留已删除元素的一些统计信息 为此 我使用列表中的remove if 函数 并且我有一个谓词 我想使用这个谓词来收集统计数据 这是谓词的代码 class TestPredicate privat
  • 数组中连续元素的最大乘积

    我在现场面试的时候被问到了这个算法问题 由于没有要求我签署保密协议 我将其发布在这里寻求答案 给定一个数组REAL不包含 0 的数字 找到产生最大乘积的连续元素 该算法应在线性时间内运行 我考虑过以下方法 使用两个数组 第一个是利用DP思想
  • 关于在字典中查找所有有效单词的算法问题

    给定一个字典 只是一个字符串列表 您收到来自外部来源的未知数量的信件 给定字母串 您将如何列出您可以通过这些字母的任意组合组成的所有有效单词 来自字典 因此 如果您收到 applead 你应该找到apple bad pad lead等 我知
  • 如何仅使用单个数组在 JavaScript 中模拟调用堆栈

    我正在看维基百科页面 https en wikipedia org wiki Call stack在调用堆栈上 并尝试理解这个图像 据我所知 哈哈 const memory memory 0 3 top of stack pointer m
  • C 埃及分数

    古埃及人仅使用以下形式的分数1 n因此任何其他分数都必须表示为这些单位分数的总和 而且 所有单位分数都是不同的 在C或Java中使任何分数成为埃及分数 总和越少越好 的好方法是什么 可以使用什么算法 分支定界 a 例如 3 4 1 2 1
  • 包围一组点的多边形

    我有一组 S 点 2D 由 x 和 y 定义 我想找到 P 包围该组所有点的最小 含义 具有最少数量的点 多边形 P 是S 有没有已知的算法来计算这个 我在这个领域缺乏文化令人惊讶 感谢您的帮助 对于这个问题有很多算法 它被称为 最小边界框
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • 如何有效地找到距给定点最远的点(从一组点中)?

    我正在寻找一种算法或数据结构来解决以下问题 给你一组点 S 然后你会得到另一个点形式的 Q 查询 对于每个查询 找到集合中距离给定点最远的点 集合中最多有 10 5 个点和 10 5 个查询 所有点的坐标都在 0 到 10 5 范围内 我想

随机推荐

  • 如何仅使用位移位和加法进行乘法和除法?

    如何仅使用位移位和加法进行乘法和除法 要以加法和移位的方式进行乘法 您需要将其中一个数字分解为 2 的幂 如下所示 21 5 10101 2 101 2 Initial step 10101 2 1 2 2 0 2 1 1 2 0 1010
  • 如何将 QTableWidgetItem 图标放置在单元格中心

    我想要一个表格单元格只有一个图标 没有任何文本 我看到QTableWidgetItem类有一个方法来对齐文本 int QTableWidgetItem textAlignment const 我找不到调整图标位置的方法 它似乎卡在左侧 即使
  • 如何在python进程之间实时共享对象和数据?

    我正在尝试在 Python 中为实时应用程序 多重处理和大文件找到一种合理的方法 一个父进程生成 2 个或更多子进程 第一个孩子读取数据 保存在内存中 其他孩子以管道方式处理它 数据应该被组织成一个对象 发送到下面的进程 进行处理 发送 处
  • 将整个文本文件中的 Tab 替换为空格 python

    我有一个文本文件 其中值之间包含 TAB 如下所示 Yellow Hat Person 293 997 328 1031 Yellow Hat Person 292 998 326 1032 Yellow Hat Person 290 99
  • 调用 Web 服务时出现“内存不足”异常

    我有一个 ASP NET Web 应用程序 它调用 NET DLL 而 NET DLL 又调用 Web 服务 Web 服务调用抛出异常 无法生成临时类 结果 1 错误 CS0001 内部 编译器错误 0xc00000fd 错误 CS0003
  • LINQ 与 groupby 和 count

    这很简单 但我不知所措 给定这种类型的数据集 UserInfo name metric day other metric 以及这个样本数据集 joe 1 01 01 2011 5 jane 0 01 02 2011 9 john 2 01
  • iOS 7 中的 UIActivityViewController

    在我的应用程序中 我添加了这些代码行以合并 uiactivityviewcontroller 的功能 UIImage yourImage someImg UIActivityViewController activityVC UIActiv
  • 将数据输入转换为数据输入流?

    java中如何将DataInput转换为DataInputStream 我需要知道数据输入的大小 由于根据定义 流实际上没有开始或结束 因此没有万无一失的方法来知道有多少可用 因此您只需以固定大小的块从流中读取 听起来你最好使用普通的旧 r
  • matplotlib 颜色条交替顶部底部标签

    首先 这是一个自我回答的问题 因为我相信这在某些情况下会有帮助 例如在这个帖子 https stackoverflow com questions 20337664 cleanest way to hide every nth tick l
  • SQL Server:带有标题的动态数据透视表,包含列名称和日期

    我正在尝试使用动态数据透视表 并且需要有关将行转换为列的帮助 该表看起来像 ID expense revenue date 1 43 45 12 31 2012 1 32 32 01 01 2013 3 64 56 01 31 2013 4
  • 为什么 Javascript 对于 Websocket 很重要?

    这似乎是一个奇怪的问题 但我真的很困惑 因为下载时这个例子来自龙卷风 https github com facebook tornado tree master demos websocket我想 好吧 我运行它 它会起作用的 但问题是 它
  • 每天在特定时间运行 CRON 作业

    现在我每天下午 3 点运行我的 cron 作业 0 15 但我想一天运行两次我的 cron 作业 上午 10 30 和下午 2 30 0 30 10 我相信该命令将在上午 10 30 运行 我应该如何在下午 2 30 运行它 Cron实用程
  • Excel:令人难以置信的收缩和扩展控件[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有时 我会遇到一个电子表格 其中的魔法按钮或列表框会随着时间的推移而变大或变小 代码中没有任何内容指示这一点 还有人经历过这种快乐吗 该问
  • 类型错误:无法读取未定义的属性“then”

    loginService islogged 上面的函数返回一个类似 failed 的字符串 但是 当我尝试在其上运行 then 函数时 它将返回错误 TypeError Cannot read property then of undefi
  • Fortran 2003 中的类型绑定过程重载

    我已经用 Java 编程几年了 然而 我现在正在学习一门使用 Fortran 作为示例代码 77 标准 的课程 尽管我一直将 Fortran 视为一门古老的语言 但我决定使用 gfortran 编译器尝试 2003 年标准的最新实现 以亲自
  • 在 Node.js 中使用 JSON 对象进行响应(将对象/数组转换为 JSON 字符串)

    我是后端代码的新手 我正在尝试创建一个函数来响应我的 JSON 字符串 我目前从一个例子中得到了这个 function random response console log Request handler random was calle
  • 更改回形针中的错误验证消息

    当您在回形针中设置验证消息时 例如 validates attachment presence image message gt xxxx 自定义消息会自动以字段名称作为前缀 即使它已被 message 覆盖 如何完全覆盖该消息并使其完全自
  • 如何让 PHP 使用国际化日期?

    我正在尝试让 PHP 日期能够跨语言工作 语言代码将根据登录用户的语言设置提供 我想我可以这样做 setlocale LC ALL de DE UTF 8 echo strftime A B Y 但输出是 Wednesday April 2
  • 如何获取表单提交popup.html chrome扩展的值

    我一直在尝试获取表单中用户输入的值 以传递给 chrome 扩展中的 javascript 函数 问题是我不知道如何获取用户输入 这是我的 manifest json 文件的一部分 browser action default icon a
  • 如何找到最长的回文子序列?

    问题就在这里 6 7ch6 http www cs berkeley edu vazirani algorithms chap6 pdf 来自算法书 Vazirani 与经典问题略有不同找到最长的回文 https stackoverflow