c_cpp 【动态规划】最长公共子串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 【动态规划】最长公共子串相关的知识,希望对你有一定的参考价值。

// CPPPRO.cpp : 定义控制台应用程序的入口点。
//3m6 最长公共子串,动态规划实现
#include "stdafx.h"
#include <iostream>  
#include <string>
using namespace std; 
 
string getLCSLength(string &s, string &t);
 
int main()
{
	string s,t;
	cout<<"请输入字符串s:"<<endl;
	cin>>s;
	cout<<"请输入字符串t:"<<endl;
	cin>>t;
	cout<<"最长公共子串为:"<<endl;
	cout<<getLCSLength(s,t)<<endl;
	return 0;
}
 
string getLCSLength(string &s, string &t)
{
	int p = s.length();
	int q = t.length();
 
	string **num = new string *[p];  
    for(int i=0;i<p;i++)    
    {    
        num[i] = new string[q];  
    }   
 
	char char1 = '\0';
	char char2 = '\0';
 
	int len = 0;
	string lcs = "" ;
 
	for(int i=0; i<p; i++)
	{
		for (int j=0; j<t.length(); j++)
		{
			char1 = s.at(i);
			char2 = t.at(j);
			if(char1!=char2)
			{
				num[i][j] = "" ;
			}
			else
			{
				if (i==0||j==0)
				{
					num[i][j]=char1;
				}
				else
				{
					num[i][j]=num[i-1][j-1]+char1;
				}
				if(num[i][j].length()>len)
				{
					len = num[i][j].length() ;
					lcs = num[i][j];
				}
				else if(num[i][j].length()==len)
				{
					lcs = lcs + "," + num[i][j];
				}
			}
		}
	}
 
	for(int i=0;i<p;i++)    
    {    
        delete[] num[i]; 
    } 
	delete[] num;
 
	return lcs;
}

以上是关于c_cpp 【动态规划】最长公共子串的主要内容,如果未能解决你的问题,请参考以下文章

动态规划——最长公共子序列与最长公共子串 (含Python实现代码)

算法图解:动态规划之最长公共子串,最长公共子序列

最长公共子串(动态规划)

动态规划:最长公共子串和最长公共子序列

动态规划 最长公共子序列 过程图解

动态规划——最长公共子串:理解空间优化