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

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(使用前将#替换为@)

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

  • 关于Marching Cubes算法的澄清

    关于Marching Cubes 我对其算法和实现有一些疑问 我已经阅读了 Marching Cubes 的 Paul Bourke 优秀文章以及网站上可用的源代码 但是 我在理解以及如何以自己的方式实现算法方面仍然遇到了一些问题 问题如下
  • 自动跟踪算法

    我正在尝试写一个simple跟踪例程来跟踪电影中的某些点 本质上我有一系列 100 帧长的电影 在黑暗背景上显示一些亮点 我每帧有大约 100 150 个点 它们在电影的过程中移动 我想跟踪它们 所以我正在寻找一些有效的 但可能不会过度实施
  • 数独算法,暴力破解[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在尝试
  • Python 旅行商贪婪算法 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 因此 我为旅行推销员问题创建了一种排序 并按 x 坐标和 y 坐标进行排序 我正在尝试实施贪婪搜索 但无法做到 此外 每
  • 重写修改后的 goto 语义的算法

    我有一大堆使用旧的自行设计的脚本语言编写的遗留代码 我们将它们编译 翻译成 javascript 该语言有条件跳转 跳转到标签 与普通 goto 语句的区别在于 不可能向后跳转 该语言中没有嵌套的 if 语句或循环 由于 javascrip
  • 我应该对算法使用递归还是记忆化?

    如果我可以选择使用递归或记忆来解决问题 我应该使用哪一个 换句话说 如果它们都是可行的解决方案 因为它们提供了正确的输出并且可以在我正在使用的代码中合理地表达 那么我什么时候会使用其中一个而不是另一个 它们并不相互排斥 您可以同时使用它们
  • c# GDI边缘空白检测算法

    我正在寻找解决方案检测边缘空白c 位图 来自 c 托管 GDI 库 图像将是透明的 or white 大多数 400x 图片的尺寸为 8000x8000px 边缘周围有大约 2000px 的空白 找出边缘的最有效方法是什么 x y 高度和宽
  • JavaScript 中的埃拉托斯特尼筛法对大量数据无限运行

    我一直在尝试写埃拉托斯特尼筛法 http en wikipedia org wiki Sieve of EratosthenesJavaScript 中的算法 基本上我只是按照以下步骤操作 创建从 2 到 n 1 的连续整数列表 令第一个素
  • 连接红黑树

    OCaml 标准库有一个很棒的Set使用非常有效的分而治之算法来计算的实现union两套 我相信它会从一组中获取整个子树 而不仅仅是单个元素 并将它们插入到另一组中 并在必要时重新平衡 我想知道这是否需要 OCaml 使用的 AVL 树中保
  • 覆盖二维平面上给定点的最小圆

    问题 覆盖 2D 平面上给定 N 个点的圆的最小可能直径是多少 解决这个问题最有效的算法是什么 它是如何工作的 这是最小圆问题 http en wikipedia org wiki Smallest circle problem 请参阅参考
  • 调度算法,找到设定长度的所有非重叠区间

    我需要为我的管理应用程序实现一种算法 该算法将告诉我何时可以将任务分配给哪个用户 我实现了一个蛮力解决方案 它似乎有效 但我想知道是否有更有效的方法来做到这一点 为了简单起见 我重写了算法以对数字列表进行操作 而不是数据库查询等 下面我将尝
  • 查找字符串中最常见的子字符串的算法

    是否有任何算法可用于查找字符串中最常见的短语 或子字符串 例如 以下字符串将 hello world 作为其最常见的两个单词短语 hello world this is hello world hello world repeats thr
  • Z 算法背后的直觉

    Z算法是一种复杂度为O n 的字符串匹配算法 一种用例是从字符串 B 中查找字符串 A 的最长出现次数 例如 overdose from stackoverflow 将会 over 您可以通过使用组合字符串调用 Z 算法来发现这一点 ove
  • 对 Java 中 *any* 类的所有实例进行全排序

    我不确定以下代码是否能确保 Comparator 的 Javadoc 中给出的所有条件 class TotalOrder
  • 实时战略战争游戏人工智能算法

    我正在设计一款实时策略战争游戏 其中 AI 将负责控制大型六边形地图上的大量单位 可能超过 1000 个 一个单位有许多行动点 可以用于移动 攻击敌方单位或各种特殊行动 例如建造新单位 例如 一辆拥有 5 个行动点的坦克可以花费 3 个行动
  • 确定一组日期的事件重复模式

    我正在寻找一种模式 算法或库 它将采用一组日期并在退出时返回重复的描述 即集合 11 01 2010 11 08 2010 11 15 2010 11 22 2010 11 29 2010 会产生类似 十一月的每个星期一 的结果 有没有人以
  • 射线与三角形相交

    我看到了快速最小存储射线 三角形交集 http www cs virginia edu gfx Courses 2003 ImageSynthesis papers Acceleration Fast 20MinimumStorage 20
  • 更改计划的开始日期以优化资源

    我有很多工作需要在特定的时间间隔执行 然而 我们每天完成这项工作的资源有限 因此 我正在尝试优化开始时间日期 开始时间日期只能向前移动 不能向后移动 以便每天使用的资源与我们的预算更加不相似 这些函数在下面的示例中使用 Function t
  • 如何在javascript中计算日出和日落?

    我正在使用appcelerator titan开发一个IOS应用程序 我想让我的应用程序在日出和日落时向用户发送本地通知 解决这个问题的一个好工具是使用 YQL 的雅虎天气 但是 雅虎天气仅供非商业用途 我正在尝试找到一个javascrip
  • Javascript树遍历算法

    我需要帮助以深度优先的方式遍历树结构 我无法想出一个算法来正确地做到这一点 我的输入是这样的 A B C 1 2 a b c d 输出应采用以下形式 A 1 a A 1 b A 1 c A 1 d A 2 a A 2 b A 2 c A 2

随机推荐

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

    如何仅使用位移位和加法进行乘法和除法 要以加法和移位的方式进行乘法 您需要将其中一个数字分解为 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