
最长公共子序列(动态规划)--算法学习
��������������� ��������������������������� ������������������������ ������������ ��������������������� ������������������������ ��������������� ������
发布日期:2021-05-15 00:27:57
浏览次数:21
分类:精选文章
本文共 2513 字,大约阅读时间需要 8 分钟。
���������������������������������������������������������������������������������������������������������������������������������������������������������������������������
��������������� ��������������������������������������������������������������� MaxLen(i, j)
������ i
������������������������������������������ j
������������������������������������������������������������������������
���������������
- ���
i
���j
��� 0 ��������������������� 0������������������������������������
���������������
- ������
s1[i-1] == s2[j-1]
������MaxLen(i, j) = MaxLen(i-1, j-1) + 1
��� - ���������
MaxLen(i, j) = Max(MaxLen(i, j-1), MaxLen(i-1, j))
���������������������������������
���������������
- ������������������������
maxLen
������������������������������������������ 1��������������� 0��� - ������������������������������������������
i
���j
���������������������������������������������
���������������
#include#include using namespace std;int maxChar(const char* s1, const char* s2, int& i, int& j) { if (s1[i] == s2[j]) { return 1; // ������1��������������������������������� } else if (s1[i] < s2[j]) { i++; // ������s1������������������������������������������ } else { j++; // ������s2������������ } return 0; // ���������������������������}int main() { string s1, s2; while (cin >> s1) { cin >> s2; int len1 = s1.length(), len2 = s2.length(); int maxLen[ len1 +1 ][ len2 +1 ]; // ���������������������������������len1+1 x len2+1 int i = 0, j = 0; for (int x = 0; x <= len1; x++) { for (int y = 0; y <= len2; y++) { if (x == 0 || y == 0) { maxLen[x][y] = 0; } else if (s1[x-1] == s2[y-1]) { maxLen[x][y] = maxLen[x-1][y-1] + 1; } else { maxLen[x][y] = max(maxLen[x-1][y], maxLen[x][y-1]); } } } cout << maxLen[len1][len2] << endl; } return 0;}
���������������
s1
��� s2
���maxLen
������������ size ��� len1+1
��� len2+1
��������������� 0���i
��� j
��������������������������������������������������������� maxLen
������maxLen[len1][len2]
��������������������������������������������������������������������������������������� O(mn)���������������������������������������������
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月17日 06时52分22秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
如何转载博客
2021-05-15
C++ 继承 详解
2021-05-15
OSPF多区域
2021-05-15
Grafana导入 Promethus node模板
2021-05-15
如何提高SQL查询的效率?
2021-05-15
Docker入门之-镜像(二)
2021-05-15
数据结构——链表(3)
2021-05-15
socket模块和粘包现象
2021-05-15
Python学习--模块
2021-05-15
去了解拉绳位移编码器的影响因素
2021-05-15
影响拉线位移传感器精度的原因有哪些?
2021-05-15
无法初始化Winsock2.2处理
2021-05-15
Horizon Cloud之UAG访问异常
2021-05-15
vm无法打开电源
2021-05-15
vMotion 操作失败进度卡在14% ,报错: Operation Timed out
2021-05-15
重置UAG Application admin密码
2021-05-15
Horizon Daas租户管理平台扩展分配时报:内部错误
2021-05-15
vcenter访问报503错误处理
2021-05-15
项目计划甘特图绘制说明
2021-05-15
09.QT应用程序启动外部exe文件
2021-05-15