问题来源
http://ac.jobdu.com/problem.php?pid=1042
问题描述
给定两个字符串,求其最长公共子序列(LCS)。
问题分析
网上是在是太多这类问题的文章了,随便贴一个吧。
http://blog.csdn.net/yysdsyl/article/details/4226630/
参考代码
// // Created by AlvinZH on 2017/6/22. // Copyright (c) AlvinZH. All rights reserved. // #include <iostream> #include <algorithm> #include <cstring> using namespace std; string S,P; int LCS[105][105]; int getLCS() { int Slen = S.length(); int Plen = P.length(); memset(LCS,0, sizeof(LCS)); for(int i=0;i<Slen;i++) { for(int j=0;j<Plen;j++) { if(S[i] == P[j]) LCS[i+1][j+1] = LCS[i][j]+1; else { if(LCS[i+1][j] >= LCS[i][j+1]) LCS[i+1][j+1] = LCS[i+1][j]; else LCS[i+1][j+1] = LCS[i][j+1]; } } } return LCS[Slen][Plen]; } int main() { while(cin>>S>>P) { cout<<getLCS()<<endl; } }
作者: AlvinZH
出处: http://www.cnblogs.com/AlvinZH/
本人Github:https://github.com/Pacsiy/JobDu
本文版权归作者AlvinZH和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。