最长公共子序列问题
两个字符串:str1,str2.
子问题:
str1的前i个字符串和str2的前j个字符串的最长公共子序列
代码:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str1,str2;
int len1,len2;
int ** arr;
while(cin>>str1>>str2)
{
len1 = str1.length();
len2 = str2.length();
arr = new int*[len1+1];
int i,j;
for( i = 0; i < len1+1; i++)
arr[i] = new int[len2+1];
for( i = 0; i < len1+1; i++)
for( j = 0; j <len2+1; j++)
arr[i][j] = 0;
int max = 0;
for( i = 0; i < len1; i++)
{
for( j = 0; j <len2; j++)
{
if( str1[i] == str2[j] )
arr[i+1][j+1] = arr[i][j]+1;
else
{
arr[i+1][j] > arr[i][j+1] ? arr[i+1][j+1]=arr[i+1][j] : arr[i+1][j+1]=arr[i][j+1];
}
}
}
cout<<arr[len1][len2]<<endl;
/*for( i = 0; i < len1+1; i++)
delete arr[i];
delete[] arr;*/
}
return 0;
}