码迷,mamicode.com
首页 > 其他好文 > 详细

动态规划--最长公共子串

时间:2014-09-05 17:48:01      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   io   ar   for   div   问题   

最长公共子串也是一个动态规划的问题,先求出子问题的解,然后才能求出最优解。

首先我们来看设X = <x1, x2, ..., xm>, Y= <y1, y2, ..., yn>,设C[i][j]为串 X和 Y的最长公共子串长度,则

  • C[i][j]  =  C[i-1][j-1] +1,  X== Yj
  • C[i][j]  =  0,  X!= Yj

申请一个m*n的数组,同时计算出该数组对应位置的数值,找出最大值,则为X 和 Y最长公共子串。

代码如下:

 1 // LCS(SubString).cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include <iostream>
 5 #include <string>
 6 using namespace std;
 7 
 8 
 9 int LengthOfLongestSubString(const string &X, const string &Y)
10 {
11     // 使元素从下标0开始存储,方便数组访问
12     string strX = " " + X, strY = " " +Y;
13     int m = strX.size(), n = strY.size();
14     int maxLength = 0;
15 
16     int **c = new int*[m];
17 
18     for (int i = 0; i < m; ++i)
19         c[i] = new int[n];
20     // init the cases that i = 0 and j = 0
21     for (int i = 0; i < m; ++i)
22         c[i][0] = 0;
23     for (int i = 0; i < n; ++i)
24         c[0][i] = 0;
25 
26     // Calculate the array C
27     for (int i = 1; i < m; i++)
28         for (int j = 1; j < n; ++j)
29         {
30             if (X[i] == Y[j])
31             {
32                 c[i][j] = c[i - 1][j - 1] + 1;
33                 if (c[i][j] > maxLength)
34                     maxLength = c[i][j];
35             }
36             else
37                 c[i][j] = 0;
38         }
39     // Free the memory
40     for (int i = 0; i < m; ++i)
41         delete c[i];
42     delete []c;
43     
44     return maxLength;
45 }
46 
47 
48 int main(int argc, char** argv)
49 {
50     const string X = "ABCDEFDBEFG";
51     const string Y = "DKGDBCDEFAB";
52 
53     int Length = LengthOfLongestSubString(X, Y);
54     cout << "The max Length is :" << Length << endl;
55     
56     return 0;
57 }

 

动态规划--最长公共子串

标签:style   blog   color   os   io   ar   for   div   问题   

原文地址:http://www.cnblogs.com/rocky526/p/3958364.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!