我想出了一种蛮力算法来查找两个给定字符串之间最长的公共子序列.看起来它的时间复杂度为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();
}
如果上面的代码不正确,我希望蛮力算法返回最长的公共子序列字符串,我该如何实现???
最佳答案
不能.这不是解决LCS问题的正确蛮力算法.
看到这种情况-
看到这种情况-
图书馆
安博
这两个字符串的LCS的答案应为3.
但是在您的算法中,它将计算2(AK).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。