☆求N个字符串的最长公共子串☆
vb吧
全部回复
仅看楼主
level 5
笑如咖啡 楼主
求N个字符串的最长公共子串,N<20,字符串长度不超过255。例如N=3,由键盘 依次输入3个字符串为:What is local bus ?Name some local buses.local bus is a high speed I/O bus close to the processor.则最长公共子串为"local bus"。
2007年05月13日 08点05分 1
level 0
需要看算法书或者看最近的信息学奥赛的比赛程序
2007年05月13日 09点05分 2
level 1
不太清楚不过我的大概思路是先读入三个串,然后用replace去掉符号换成空格,用sprit按空格分开,再用instr搜索公共子串,len一下就好了~不过有点麻烦
2007年05月13日 13点05分 3
level 12
很难的一个问题,关键是如何使算法高效.
2007年05月14日 12点05分 4
level 0
呵呵,4年前看过,不过到现在还不懂.
2007年05月14日 13点05分 5
level 0
- - 算法大师都说难了。。。
2007年05月14日 13点05分 6
level 12
大家都写写看看呢.近日比较忙,一有空我就想想怎么实现.
2007年05月14日 23点05分 7
level 5
笑如咖啡 楼主
我的思路是:首先,找出比较短的两个字符串的最长公共字符串然后再在第三个字符串(最长的字符串)中找是否有这个公共字符串如果没有。。那么就转回来继续把他们的公共字符串缩短再找。。如此循环。。应该能找出来
2007年05月15日 09点05分 8
level 12
我考虑是建线性表来做.
2007年05月15日 12点05分 9
level 2
自己的想法。1找出最短的字符串s12截取s1的第一个字符,判断其他字符串内是否都有2.1如果有,加长截取字符串长度1 重复判断,直到不全有2.2如果不全有,判断当前截取字符串长度,如果不为1,保存长度-1字符串,并记录长度。3从截取字符串最后字符开始,重复2过程,当求得字符串长度大于已经记录的长度时,更改所记录的字符串及其长度。4输出最后结果。
2007年05月15日 14点05分 10
level 0
so it's to easy....said by doctor
2007年05月15日 17点05分 11
level 0
doctor ,如果你有好的方法就贴出来吧,给大家学习一下.
2007年05月16日 11点05分 12
level 12
doctor,你认为很容易吗?我认为实现是不难,可是怎么做更高效才是问题的关键所在.
2007年05月17日 00点05分 14
level 7
记得没错的话这应该是NP完全的。
2007年05月17日 05点05分 15
level 12
我已经完成了.大家可以在http://www.ggggdiu.com/download/MaxSubString.rar下载测试效率.
2007年05月17日 08点05分 16
level 0
阴梗阴梗阴梗阴梗阴梗阴梗阴梗阴梗阴梗阴梗阴梗阴梗阴梗阴梗阴梗阴梗阴梗阴梗阴梗阴梗阴梗阴梗阴梗阴梗阴梗阴梗阴梗阴梗
2007年05月17日 11点05分 17
level 6
方法应该是找出最短的一个字符串,然后就每一个字符串去对,唉。如果最短的字符串有一万个字符,那么就要盾环100000000 次,真是个大数目啊。
2007年05月17日 12点05分 18
level 0
没有VB,就在EXCEL中就楼主所提供例子做了一个测试,只是个大概思路,未顾及效率,还望各位高手狗尾续貂!Sub Test()Dim AllStr(1 To 3) As String, theShort As String, Cx As String, theNum As IntegerMax = 100000000For i = 1 To 3 AllStr(i) = Sheet1.Cells(i, 1) l = Len(AllStr(i)) If l < Max Then Max = l: lr = iNexttheShort = AllStr(lr)For i = Len(theShort) To 1 Step -1 For j = 1 To Len(theShort) - i + 1 Cx = Mid(theShort, j, i) theNum = 0 For k = 1 To 3 If k <> lr Then If InStr(AllStr(k), Cx) > 0 Then theNum = theNum + 1 End If Next If theNum = 2 Then MsgBox Cx: Exit Sub NextNextEnd Sub
2007年05月18日 07点05分 19
level 12
楼上的代码很精练,在短数据(每行字数相对较短)的数据量下,效率很高.
2007年05月18日 12点05分 20
level 12
我已经编写了一个测试平台,并收录了19F的代码,大家可以在此测试平台上方便的测试自己代码的性能.平台地址http://www.ggggdiu.com/download/MaxSubString.rar
2007年05月18日 12点05分 21
1 2 尾页