我已经提出了一个强力算法来寻找两个给定字符串之间最长的公共子序列。看起来它的时间复杂度是O(n^3)。它通过了我所有的测试用例,但我仍然不确定它是否能通过所有测试用例。请让我知道这是正确的蛮力算法?
public String lcs(String s1, String s2) {
int s2Start = 0;
StringBuilder result = new StringBuilder("");
StringBuilder temp = new StringBuilder("");
for(int s1Start = 0; s1Start < s1.length(); s1Start++) {
s2Start = 0; // reset
if(temp.length() > result.length()) {
result = temp;
}
temp = new StringBuilder(""); // reset
for(int i = s1Start; i < s1.length(); i++) {
char s1Char = s1.charAt(i);
for(int j = s2Start; j < s2.length(); j++) {
char s2Char = s2.charAt(j);
if(s1Char == s2Char) {
temp.append(Character.toString(s1Char));
s2Start = j + 1;
break;
}
}
}
}
if(temp.length() > result.length())
result = temp;
return result.toString();
}如果上面的代码不正确,我想要暴力算法返回最长的公共子序列字符串,我怎么才能获得这个?
发布于 2019-01-19 15:31:23
不是的。这不是一个解决LCS问题的合适的蛮力算法。看看这个案例-
AKBLC AMBNCK
这两个字符串的LCS的答案应该是3。但在你的算法中,它将计算2 (AK)。
https://stackoverflow.com/questions/54264912
复制相似问题