`
antsmall
  • 浏览: 15662 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

lcs的一些写法

J# 
阅读更多

 

/************************************************************************/
/* lcs test                                                             */
/* 2011-2-9                                                             */
/************************************************************************/
#include <iostream>
#include <vector>
#include <string>
using namespace std;


string lcs_1_array2(string a, string b)
{
	if(a == "" || b == "")
		return "";
	int lenA = a.length();
	int lenB = b.length();
	int shortLen = min(lenA, lenB);
	int longLen = max(lenA, lenB);
	string& longStr = lenA > lenB ? a:b;
	string& shortStr = lenA > lenB ? b:a;

	int*arr = new int[shortLen];
	memset(arr, 0, sizeof(int)*shortLen);
	
	int maxPos = 0;
	int maxMatchLen = 0;
	int lastVal = 0;
	int oldVal = 0;
	
	for(int i = 0; i < longLen; i++) 
		for(int j = 0; j < shortLen; j++) 
		{
			oldVal = arr[j];
			if(longStr[i] == shortStr[j]) 
			{				
				if(j > 0)
					arr[j] = lastVal + 1;
				else 
					arr[j] = 1;
				if(arr[j] > maxMatchLen) 
				{
					maxMatchLen = arr[j];
					maxPos = j;
				}
			} 
			else 
			{
				arr[j] = 0;
			}
			lastVal = oldVal;
		}

	if(maxMatchLen == 0)
		return "";
	cout<<maxPos<<"  "<<maxMatchLen<<endl;
	return shortStr.substr(maxPos + 1 - maxMatchLen, maxMatchLen);
}

string lcs_2_array(string a, string b)
{
	if(a == "" || b == "")
		return "";
	int lenA = a.length();
	int lenB = b.length();
	int shortLen = min(lenA, lenB);
	int longLen = max(lenA, lenB);
	string& longStr = lenA > lenB ? a:b;
	string& shortStr = lenA > lenB ? b:a;

	int**arr = new int*[2];
	arr[0] = new int[shortLen];
	arr[1] = new int[shortLen];
	memset(arr[0], 0, sizeof(int)*shortLen);
	memset(arr[1], 0, sizeof(int)*shortLen);
	
	int maxPos = 0;
	int maxMatchLen = 0;

	for(int i = 0; i < longLen; i++) 
		for(int j = 0; j < shortLen; j++) 
		{
			if(longStr[i] == shortStr[j]) 
			{
				if(i > 0 && j > 0)
					arr[i%2][j] = arr[(i+1)%2][j-1] + 1;
				else 
					arr[i%2][j] = 1;
				if(arr[i%2][j] > maxMatchLen) 
				{
					maxMatchLen = arr[i%2][j];
					maxPos = j;
				}
			} 
			else 
			{
				arr[i%2][j] = 0;
			}
		}

	if(maxMatchLen == 0)
		return "";
	cout<<maxPos<<"  "<<maxMatchLen<<endl;
	return shortStr.substr(maxPos + 1 - maxMatchLen, maxMatchLen);
}


int main()
{

	string a, b;
	
	a = "312";
	b = "31233";

	cout<<"Test of 1 array"<<endl;
	cout<<lcs_1_array2(a, b)<<endl;

	cout<<"========================================="<<endl;

	cout<<"Test of 2 array"<<endl;
	cout<<lcs_2_array(a, b)<<endl;

	system("pause");
	return 0 ;
}

 

分享到:
评论

相关推荐

    LCS.rar_LCS_LCS文件咋打开_lcs java_文件合并

    当然,为了调试和查看输出,我们可能还需要一些辅助的开发工具,如集成开发环境(IDE)或者命令行工具。 总的来说,这个"LCS.rar"压缩包包含了一个基于LCS算法的Java程序,用于合并两个文件,保留它们的共同部分,...

    LCS算法java源代码

    根据LCS算法取出最长公用字符串,实现字符串比较

    最长子序列LCS算法

    最长子序列LCS算法,用于处理最长公共字串问题。 两个序列的LCS问题包含两个序列的前缀的LCS,因此,LCS问题具有最优子结构性质。在设计递归算法时,不难看出递归算法具有子问题重叠的性质。   设C[i,j]C[i,j]...

    lcs部署安装.doc

    "LCS服务器部署安装指南" LCS(Live Communications Server)是一种实时通信服务器软件,用于提供即时消息、 Presence、Audio/Video 会议等功能。在部署 LCS 服务器之前,需要完成相关的环境配置和安装准备工作。...

    LCS的实现代码

    最长公共子序列(Longest Common Subsequence,简称LCS)是计算机科学中一种经典的问题,主要涉及到了动态规划这一算法设计思想。在这个问题中,给定两个字符串,目标是找到它们的最长子序列,这个子序列不必连续,...

    lcs.rar_LCS_lcs dynamic

    **最长公共子序列(Longest Common Subsequence, LCS)** 最长公共子序列问题是一个经典的计算机科学问题,主要涉及字符串或序列的比较。在两个给定的字符串中,LCS是指无需考虑字符顺序的最长子串,它同时存在于这...

    LCS.rar_LCS_lcs dynamic

    标题中的"LCS.rar_LCS_lcs dynamic"表明这是一个关于最长公共子序列(Longest Common Subsequence, LCS)问题的资源包,重点在于动态规划的实现。动态规划是一种解决复杂问题的有效算法,通常用于找到最优化的解决...

    LCS.rar_LCS

    而www.pudn.com.txt可能是用来测试程序的输入文件,包含了一些字符串数据用于计算LCS。 通过阅读和理解LCS.CPP的源代码,我们可以深入学习动态规划的思想,理解如何将这个算法应用于实际问题中。同时,这也可以作为...

    最长公共子序列LCS算法

    最长公共子序列(Longest Common Subsequence,LCS)算法是一种经典的计算机科学问题,主要应用于比较和分析两个或多个序列的相似性。在文本编辑、生物信息学、数据挖掘等领域有着广泛的应用。LCS问题的基本目标是...

    lcs.rar_LCS

    标题中的“lcs.rar_LCS”表明这是一个关于“最长公共子序列(Longest Common Subsequence, LCS)”问题的压缩文件。LCS是计算机科学中一个经典的算法问题,主要涉及字符串处理、序列比较和动态规划等领域。在这个...

    C#写的LCS算法

    最长公共子序列(Longest Common Subsequence,简称LCS)是一种经典的计算机科学问题,主要应用于比较和分析两个或多个序列的相似性。在本场景中,我们关注的是使用C#编程语言来实现这一算法。C#是Microsoft开发的一...

    C# LCS 文本比较器

    《C#实现LCS文本比较器详解》 在软件开发中,文本比较是常见的需求,尤其是在版本控制、文档差异分析等方面。本项目“C# LCS 文本比较器”基于最长公共子序列(Longest Common Subsequence,简称LCS)算法,提供了...

    lcs.zip_LCS

    最长公共子序列(Longest Common Subsequence,简称LCS)是计算机科学中一个经典的问题,特别是在生物信息学、文本处理和软件工程等领域有着广泛应用。LCS问题的基本目标是从两个或多个给定的序列中找到一个最长的子...

    LCS算法(连续)

    **最长公共子序列(LCS, Longest Common Subsequence)算法是计算机科学中一种经典的字符串比较算法,主要用于找出两个序列的最长子序列,这个子序列并不需要在原序列中是连续的。在本项目中,LCS算法被实现为连续...

    LCS算法源码

    一个子序列是从原序列中删除一些或不删除任何元素,但保持原有顺序形成的序列。LCS不关心子序列在原序列中的起始位置,只关注它们的元素是否相同。 动态规划解决方案通常使用一个二维数组L[X.length+1][Y.length+1]...

    lcs.rar_LCS_LCS算法_Lcs.rar_最长公共子序列

    最长公共子序列(Longest Common Subsequence,简称LCS)是一种经典的计算机科学问题,主要应用于比较和分析序列,如文本、DNA序列或编程语言源代码。LCS算法旨在找到两个给定序列之间的最长子序列,这个子序列并不...

Global site tag (gtag.js) - Google Analytics