首页 > 代码库 > UVA - 10192Vacation(LIS)
UVA - 10192Vacation(LIS)
题目:UVA - 10192Vacation(LIS)
题目大意:求两个字符串的最长公共子串。
解题思路:递推公式: s1【i】 = s2【j】 , l【i】[j] = l[i - 1] [j - 1] + 1;
s1【i]】!= s2【j】 , l【i】【j】 = Max (l[i - 1] [j], l[i][j - 1]).
当i和j有一个为0 始,l【i】【j】 = 0;
代码:
#include <cstdio> #include <cstring> const int N = 105; char s1[N], s2[N]; int l[N][N]; int l1, l2; void init () { memset (l, 0, sizeof (l)); l1 = strlen(s1); l2 = strlen(s2); } int Max (const int a, const int b) { return a > b? a: b; } int main () { int cas = 0; while (gets(s1) != NULL) { if (s1[0] == '#') break; gets (s2); init (); for (int i = 1; i <= l1; i++) for (int j = 1; j <= l2; j++) if (s1[i - 1] == s2[j - 1]) l[i][j] = l[i - 1][j - 1] + 1; else l[i][j] = Max (l[i][j - 1], l[i - 1][j]); printf ("Case #%d: you can visit at most %d cities.\n", ++cas, l[l1][l2]); } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。