最长同序子串
有一个问题想了很久,还是没有什么好的想法。希望高手能给点提示。定义:
1.如果一个字符串s中的字符的相对顺序不允许交换,就称s是一个有序字符串;
2.如果t是字符串s中任意的取某些字符,并且按原来的顺序排列,就说t是s的一个同序子串。
题目描述:
设集合W是由字符串s和t的公共同序子串组成的集合,试给出求解W中长度最大的字符串的长度(看清了)的算法。
本人的想法:
S1:求出s和t的公共字符,并且按照原来的顺序排列,记为r;
S2:取遍r的子串的所有可能的情况,并和s比较,看看那些符合要求,并记录所得的长度。(比较时t的下标只增不减)
S3:最后取出记录长度的最大值。
例如:s="abcd",t="acfdfg"
S1:r="acd"
S2:分别用"acd""ac""ad""cd""a""c""d"同s比较。可以发现最大长度为3;
数据少一点的话还很有效,但是如果strlen(r)=50,或者更大就几乎不可能了。因为所有可能为2^(strlen(r))-1。相当的恐怖。
望高人指点。