- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在解决这个问题 longest palindromic substring leetcode 上的问题,我遵循动态编程方法,创建了一个 n*n bool 表(我猜这也是此问题的标准解决方案)并成功解决了它,但我只是想知道这个问题是否可以使用我们的技术来解决用于找出最长公共(public)子序列或更准确地说,只是想知道 LCS 问题是否是该问题的父问题,就像最长回文子序列的情况一样,可以通过 LCS 轻松解决,将另一个字符串作为原始字符串的反转。
我搜索了网页,但没有找到任何使用 LCS 技术的解决方案,这就是为什么想在这里问它的原因。如果可以使用 lcs 技术解决,那么请提供方法或一些很好的理由说明为什么无法使用 LCS 解决。
最佳答案
我实际上以您想要的确切方式解决了这个确切的问题!我们可以在 LCS 方法中使用单个数组来执行此操作,但这样做的开销是您必须手动检查每个组合是否是回文。这种方式的解决方法见下文。这在 LC 上也被接受。
public String longestPalindrome(String s) {
int maxlen = 1;
int len = s.length();
String[] dp = new String[len];
dp[0] = s.substring(0,1);
for (int i = 1; i < len; i++) {
dp[i] = dp[i-1];
for (int j = 0; i - j >= maxlen; j++) {
if (s.charAt(j) != s.charAt(i)) continue;
if (isPal(s.substring(j, i + 1))) {
dp[i] = s.substring(j, i + 1);
maxlen = i - j;
break;
}
}
}
return dp[len-1];
}
public boolean isPal(String s) {
for (int i = 0; i < s.length()/2; i++) {
if (s.charAt(i) != s.charAt(s.length()-1-i)) return false;
}
return true;
}
关于palindrome - 使用lcs的最长回文子串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64602312/
我想问一下“ionic run android -lcs”中的标志“lcs”是什么意思?(我的 ionic 框架有一个错误,即我的应用程序仅在使用此标志时以正确的方式构建,但我不知道它们代表什么。)
我已经编写了解决最长公共(public)子序列问题的代码。只需要定义 m X w 维度的二维表。我已将其定义为全局变量,但它引发了超出容量的错误。 #define FOR(i,n) for( i =
我正在尝试执行一个 LCS 函数,该函数利用递归为我提供 LCS 有效的位置数,以及此处描述的 LCS 位置: input: LCS("smile", "tile") output: [3, "##i
我正在开发一个程序来查找多个字符串之间的最长公共(public)子字符串。我已经将我的方法降低到使用后缀数组或后缀树。我想看看哪种方法更好(如果有的话)以及原因。同样对于后缀数组,我已经看到了一些用于
我在考虑使用动态规划的最长公共(public)子序列问题。 无法找出打印所有 lcs 的方法。 我能想到的一种方法是从表格中创建一个图表并在该图表中找到所有可能的路径,但该解决方案似乎非常慢。 最佳答
本文实例讲述了java算法之最长公共子序列问题(lcs)。分享给大家供大家参考,具体如下: 问题描述:一个给定序列的子序列是在该序列中删去若干元素后得到的序列。确切地说,若给定序列x= { x1,
我想打印 LCS 问题的所有可能的解决方案。 两个字符串 abcbdab 和 bdcaba 应打印以下 3 个字符串:bdab、bcba、bcab。 C为全局矩阵表,根据算法取值,m、n为序列a、b的
我即将完成我的程序,但我遇到了一个小问题。 I/O 应该看起来像这样: I: fanlc2("human", "chimpanzee") O: [4, 'h#man', '#h#m#an###'] 但
我正在尝试进行动态规划以查找 LCS 的长度。我为此使用了二维数组。但是对于大字符串,它会由于内存溢出而产生运行时错误。请告诉我我应该如何在一维数组中执行此操作以避免内存限制。 #include #
我正在使用动态规划解决 LCS 问题。我在不查看解决方案的情况下自己推导出 DP 解决方案时遇到了问题。 我目前的推理是给定两个字符串,P 和 Q: 我们可以枚举 P 的所有子序列,其大小为 2^n。
两棵 Root过的、有序的、有标签的树的 LCS 是最大的森林的大小 通过删除节点从两棵树中获得。删除节点 v 意味着删除 v 和所有边 v 的事件。v 的 child 成为 v 的父级(如果存在)而
有一个动态规划算法可以找到两个序列的最长公共(public)子序列。如何找到两个序列X和Y的LCS算法。(正确性测试) (a) X = ABEDFEESTYH Y=ABEDFEESTYHABC
我在 C# 中编写了以下代码,用于获取 use 给定的两个文本的最长公共(public)子序列的长度,但它不适用于大字符串。请你帮助我好吗。我真的很困惑。 public Form1() { I
请帮助我尝试找到我实现最大公共(public)子串问题的运行时间 int main(){ string a; string b; cin>>a>>b; string::
这是一个经典的编程问题https://en.wikipedia.org/wiki/Longest_common_subsequence_problem JS 实现通过了所有测试,但 Haskell 实
我们可以通过这种方式将下面文档中的两个字符串的 LCS 算法扩展到三个字符串吗? http://www.columbia.edu/~cs2035/courses/csor4231.F13/lcs.pd
我正在使用 diff-lcs gem 来输出两个 html 内容主体之间的差异。这是示例内容。 版本一: Paragraph one. Sentence one. Paragraph two. Ano
我读过几本算法书籍,其中被告知最长公共(public)子序列的蛮力方法需要 2^n,这在时间复杂度上是指数级的。然而,我注意到,当我应用我的蛮力技术时,它需要 O(mn)(根据我个人的观察)。我想请您
假设我们有两个字符流: S = 1,2,3,5,7,4,4,10,11,12 T = 3,1,2,9,6,4,10,5,9 我想找到这个流的最大子序列,以便通过某种重新排列使它们相同,例如在这种情况下
我知道 LCS 问题需要时间 ~ O(mn) 其中 m 和 n 分别是两个序列 X 和 Y 的长度。但我的问题有点简单,所以我希望算法比 ~O(mn) 更快。 这是我的问题: 输入: 一个正整数Q,两
我是一名优秀的程序员,十分优秀!