`
niyayu
  • 浏览: 34154 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

求两字符串匹配的最长子序列

 
阅读更多
如果两种特征序列的公共子序列越长表示越接近,现在请你帮助计算出最长的公共特征。

输入说明:

本问题有多组测试数据,第一行就是测试数据的组数(1<=组数<=20)。对于每一组测试数据,有两行,每一行都是有大写英文字母组成的特征序列(1<=特征序列的长度<=1000)。



输出说明:

对于每一组输入,对应的输出只有一行,即最长的公共子序列的长度。

Sample Input:

1

ABDCRHGWDWSDSKJDSKDFHJKFDKJDSAFKJFDAKFDSAJFDKASDJLFLDKF

ERUDSHDFHGFLKGFGFKGFLKSAEWALUTRHGFKIFDGITRMDFLKDSLSDLLEHJFKLEKIREFMFK

Sample Output:

25


#include<iostream>
#include<string>

using namespace std;

#define MAX 1001

int nZ[MAX][MAX];

void vInit(int nA,int nB);
void vGetLcs(string sA,string sB);
int nMax(int nA,int nB);
void vOut(int nA,int nB);

int main()
{
    int i;
    int nCase;
    string sX,sY;
    int nX,nY;
    
    cin>>nCase;
    for(i=1;i<=nCase;i++)
    {
        cin>>sX>>sY;
        sX=" "+sX;
        sY=" "+sY;
        nX=sX.size()-1;
        nY=sY.size()-1;
        vInit(nX,nY);
        vGetLcs(sX,sY);
        vOut(nX,nY);
    }
    return 0;
}


void vInit(int nA,int nB)
{
    int i,j;
    
    for(j=1;j<=nB;j++)
    {
        nZ[0][j]=0;
    }

    for(i=1;i<=nA;i++)
    {
        nZ[i][0]=0;
    }
}

void vGetLcs(string sA,string sB)
{
    int i,j;
    int nA,nB;
    nA=sA.size()-1;
    nB=sB.size()-1;

    for(i=1;i<=nA;i++)
    {
        for(j=1;j<=nB;j++)
        {
            if(sA[i]==sB[j])
            {
                nZ[i][j]=nZ[i-1][j-1]+1;
            }
            else
            {
                nZ[i][j]=nMax(nZ[i][j-1],nZ[i-1][j]);
            }
        }
    } 
}

int nMax(int nA,int nB)
{
    return(nA>nB?nA:nB);
}

void vOut(int nA,int nB)
{
    cout<<nZ[nA][nB]<<endl;
}
分享到:
评论

相关推荐

    Python求两个字符串最长公共子序列代码实例

    【Python求两个字符串最长公共子序列】 在编程领域,字符串操作是常见任务之一,而寻找两个字符串的最长公共子序列(LCS)是其中的一个经典问题。LCS是指两个字符串中都出现过的最长的连续子序列,但不考虑字符在...

    动态规划最长子序列

    动态规划最长子序列(Longest Common Subsequence, LCS)是一种在计算机科学中广泛使用的算法,主要应用于比较序列,如字符串、DNA序列或任何可表示为序列的数据结构。该算法的目标是找出两个序列中的最长公共子序列...

    算法分析与设计最长子序列

    最长子序列(Longest Common Subsequence,简称LCS)是计算机科学中的一种经典问题,主要在算法分析和设计中有着广泛的应用。这个问题涉及到序列比对、文本编辑距离、生物信息学等多个领域。在这个问题中,我们需要...

    LCS最长公共子序列(输出一条最长子序列)

    在源码中,可能会定义一个函数,接收两个字符串参数,返回最长公共子序列,同时,可能会有一个辅助函数用于回溯矩阵找出具体的子序列。 在源码分析中,我们可以看到如何将理论转化为实际的代码逻辑。理解这些代码...

    双指针 — Leedcode 524 匹配最长子序列 (medium)

    给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以 通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字 典顺序最小的字符串。如果答案不存在,则返回空字符串。 示例...

    本科算法实验-最长公共子序列【数据+代码+说明+流程图+测试用例】

    最长公共子序列是指两个或多个序列中没有重复字符的最长子序列,它不一定是连续的,但必须是这两个序列的真正子序列。在本实验中,我们将重点关注两个字符串的LCS问题。 首先,解决LCS问题的经典方法是使用动态规划...

    最长公共子序列问题.docx

    在这个问题中,给定两个字符串或字符序列A和B,目标是找到这两个序列的最长子序列,这个子序列既在A中也出现在B中,但不必连续。下面我们将深入探讨如何使用动态规划法来解决这个问题。 首先,我们需要理解字符序列...

    求最长公共子序列动态规划

    这个问题的目的是找到两个给定序列的最长子序列,这个子序列不必连续,但必须保持原序列的相对顺序。在文本编辑、生物信息学、软件工程等领域都有广泛的应用。 动态规划是一种解决复杂问题的有效方法,通过将大问题...

    算法系列之六:最长公共子序列(LCS)问题(连续子序列)的三种解法.doc

    第一重循环确定第一个字符串的对齐位置,第二重循环确定第二个字符串的对齐位置,每次循环确定一组两个字符串的对齐位置,并从此对齐位置开始匹配两个字符串的最长子串,如果匹配到的最长子串比已知的最长子串长,则...

    LCS.rar_LCS_lcs matlab_字符 匹配_字符匹配

    LCS是一种在计算机科学中广泛使用的算法,主要用于找出两个序列之间的最长子序列,而这个子序列并不需要在原序列中连续出现。在这个上下文中,"LCS_lcs matlab"表明我们正在处理一个使用MATLAB编程语言实现的LCS算法...

    最长公共子序列

    最长公共子序列(Longest Common Subsequence,LCS)是一个在计算机科学中常见的字符串处理问题,它的目标是找到两个字符串的最长子序列,这个子序列并不需要是连续的,但必须保持原有的字符顺序。在给定的代码示例...

    VC最长公共子序列LCS

    这个问题的基本目标是找到两个字符串的最长子序列,这个子序列不需要连续,但必须保持原顺序。在本场景中,我们关注的是使用VC(Visual C++)来实现这个算法,并可视化显示结果。 动态规划是解决LCS问题的主要方法...

    最长公共子序列.pdf

    在这个问题中,我们寻找两个字符串之间的最长子序列,这个子序列在两个原始字符串中都存在,但不一定连续。这个问题在生物信息学、文本比较和编程竞赛等领域有广泛应用。 动态规划方法是解决最长公共子序列问题的...

    8.5求解最长公共子序列问题-求dp.pdf

    最长公共子序列问题是指在一个序列集合中寻找两个(或多个)序列的最长子序列,这个子序列必须是按原来序列的相对顺序出现,但不必连续。序列可以是字符串、数列等。例如,给定序列 "ABCBDAB" 和 "BDCAB",它们的...

    最长公共子序列问题

    在这个问题中,目标是找到两个序列的最长子序列,这个子序列不必连续,但必须在原序列中都存在。 在C#编程语言中解决LCS问题通常分为以下几个步骤: 1. **定义问题**: 假设有两个字符串S1和S2,我们需要找到它们的...

    动态规划讲解

    除了最长子序列问题,动态规划还可以应用于其他领域,如背包问题、最短路径问题、字符串匹配等。在解决这类问题时,关键是找到合适的状态表示和状态转移方程,并确保子问题的解能被有效地利用,以避免重复计算。 ...

    最长公共子序列--动态规划法实验

    动态规划是解决这类问题的有效方法,它可以找到两个序列中的最长子序列,这个子序列在原序列中不一定要连续,但必须保持原有的相对顺序。 在C++中实现LCS,首先我们需要理解动态规划的基本思想。动态规划是一种自底...

    最长公共子序列的若干算法

    LCS问题的目标是找到两个或多个字符串中的最长子序列,这个子序列不需要连续,但必须保持原顺序。在文本编辑、生物信息学等领域有着广泛的应用。 分治法思想在解决LCS问题时,可以将问题分解为更小的子问题,然后...

    LCS.rar_LCS_lcs algorithm_最长公共子序列

    LCS问题的基本概念是:给定两个序列X和Y,找出它们的最长子序列,这个子序列并不一定是连续的,但要在两个原始序列中都存在。例如,对于序列"ABCDGH"和"AEDFHR",其最长公共子序列是"ADH"。 KMP算法,全称为Knuth-...

    c++最长公共子序列问题LCSLength

    给定两个字符串S和T,LCS是指S和T中长度最长的子序列,这个子序列不一定是连续的,但要在两个原始字符串中同时存在。例如,如果S="ABCBDAB",T="BDCAB",则它们的LCS是"BDB"。 二、动态规划思路: 动态规划是一种...

Global site tag (gtag.js) - Google Analytics