#3904. 最长公共子序列

最长公共子序列

🐰😺📜 兔猫信奥学院的最长公共子序列探秘 📜😺🐰

在兔猫信奥学院的古籍阁里,加菲老师带着小兔和小猫,面前摊开了两卷神秘的羊皮卷——上面分别记录着字符串 \(\text{text1}\) 和 \(\text{text2}\)。加菲老师微笑着说:

“同学们,要揭开这两卷古卷的共鸣之秘,你们需要找出它们最长的‘公共子序列’——即能够在不改变各自字符相对顺序的前提下同时出现于两卷中的最长字符串。告诉我,它的长度是多少?”


输入格式

输入两行:  
第一行是字符串 text1;  
第二行是字符串 text2。  
  • \(1 \le |\text{text1}|,,|\text{text2}| \le 2000\)
  • 两个字符串均由小写英文字母组成。

输出格式

输出一个整数,表示两字符串的最长公共子序列长度;若无公共子序列,则输出 0。

样例 1

abcde
ace
3
  • 解释:最长公共子序列是 “ace”,长度为 \(3\)。

样例 2

abc
abc
3
  • 解释:最长公共子序列是 “abc”,长度为 \(3\)。

样例 3

abc
def
0
  • 解释:二者没有任何公共子序列。

🎓 加菲老师寄语:
通过二维动态规划,你可以高效求得两串的最长公共子序列长度。熟悉后,还可尝试空间优化到 O(min(n,m))O(\min(n,m)),并探索后续的“编辑距离”与“最长回文子序列”等深度算法主题。祝探秘愉快!