摘要: 问题描述: 给定两个序列 X=, Y,求X和Y长度最长的公共子串。(子串中的字符要求连续) 这道题和最长公共子序列(Longest common subsequence)很像,也可以用动态规划定义。公式如下:这里c[i,j]表示以Xi,Yj结尾的最长公共子串的长度。程序实现:int longes... 阅读全文
posted @ 2015-08-12 19:49 Sawyer Ford 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 问题定义: 给定一个长度为N的数组A,找出一个最长的单调递增子序列(不要求连续)。 这道题共3种解法。1. 动态规划 动态规划的核心是状态的定义和状态转移方程。定义lis(i),表示前i个数中以A[i]结尾的最长递增子序列的长度。可以得到以下的状态转移方程:d(i) = max(1, d(j)... 阅读全文
posted @ 2015-08-12 16:34 Sawyer Ford 阅读(283) 评论(0) 推荐(0) 编辑
摘要: 给定两个字符串S、P,如何判断S中包含P?(假设S为较长字符串,要求P中字符在S中要连续出现) 这就是经典的字符串匹配问题。暴力匹配略去不说,一种较好的解法就是KMP。对于一个新手来说,想学习KMP,建议看如下两篇文章:字符串匹配的KMP算法(阮一峰)从头到尾彻底理解KMP(2014年8月22... 阅读全文
posted @ 2015-08-12 10:48 Sawyer Ford 阅读(207) 评论(0) 推荐(0) 编辑