我需要从两个DNA字符串中找到最长的公共子字符串。
我有第一个字符串“ CGATAC”,第二个是“ GACAGTC”
使用我的代码,我的结果是:“ GAC”,但是您可以获得更长的子字符串,我的意思是“ GATC”。我需要更改以获得更长的子字符串?

int k = 0;
for (int i = 0; i < substring1.length(); i++) {
    char znak = substring1[i];
    for (int j = k; j < substring2.length(); j++) {
        char znak2 = substring2[j];
        if (znak == znak2) {
            end_substring += znak;
            k = j;
            break;
        }
    }
}
cout << end_substring;

最佳答案

您可以通过一些基本思路来改进代码。我知道您需要最长的字符串之一,而不是全部的字符串,那么您可以存储最长的字符串的长度,直到程序中的每个时刻为止,并将此长度用于搜索字符串,长度至少为length + 1。但是bes解决方案是使用动态porgramming,您可以在此处阅读此解决方案:https://www.geeksforgeeks.org/longest-common-substring-dp-29/

09-07 03:14