判斷子串行 求最長公共子串行演算法實現

2021-06-25 20:12:38 字數 826 閱讀 3247

#include#include#include#define fail 0

#define success 1

//貪心法

int getsubsequence(char p, char t)

}j++;

if (j == n)

}return success;

}//動態規劃法

void longestcommonsubsequence(char r, char q)

for (j = 1; j <= n; j++)

for (i = 1; i <= m; i++)

else

else}}

}//輸出這個二維陣列w

for (i = 0; i <= m; i++)

printf("\n");

}//逆序列印最大公共序列

for (i = m, j = n; i >= 1 && j >= 1;)

else

else}}

free(w);

}int main()

else

//最長公共子串行,x是y的子串行,當且僅當x中的所有字元在y中以相同的順序出現

char r = "abbcadc";

char q = "babbac";

longestcommonsubsequence(r, q);

printf("\n");

}

執行結果:

求最長公共子串行

問題 求兩字串行的最長公共字元子串行。這裡注意子串行和子串的區別,子串行可以是從原字串中取出一部分元素重新拼接而成的字串,但取出的元素之間的前後關係要與原字串一致 而子串則必須是連續的。如 adf 是 abcdef 的子串行,而不是子串。分析與解法 設序列x 和y 的最長公共子串行為z 則 若xm ...

求最長公共子串行

字串行的子串行是指從給定字串行中隨意地 不一定連續 去掉若干個字元 可能乙個也不去掉 後所形成的字串行。令給定的字串行 x x0,x1,xm 1 序列 y y0,y1,yk 1 是 x 的子串行,存在 x的乙個嚴格遞增下標序列 i1,ik 1 使得對所有的 j 0,1,k 1 有 xij yj 例如...

求最長公共子串行和最長公共子串

輸入描述 輸入為兩行字串 可能包含空格 長度均小於等於50。輸出描述 輸出為乙個整數,表示最長公共連續子串的長度。輸入例子 abcde abgde 輸出例子 2題解 例如 str1 abcde str2 abgde matrix 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0...