本帖最后由 yiguangqiang88 于 2010-01-23 17:19:38 编辑

解决方案 »

  1.   


    额......是这样的,你的代码好像有点问题,例如:(“abc”,"bcdd","ddee"),应该输出“abcddee”,而你的代码则输出“abcdde”!
      

  2.   

    原因找出来了,这句的l改城红色的就OK了:
    If InStr(Left(sLeft, Len(sStrIn(i)) - l), Right(sStrIn(i), Len(sStrIn(i)) - l)) Then '如果有部分包含在母字符串中
      

  3.   

    比如:
    s = "aee,aeefff,fee,edd,dee"
      

  4.   

    还是不行,如果是"babc","abcba","cbad",应输出“abcbabcbad”或"babcabcbad",而实际输出“abcbacd”!
      

  5.   

    toyer1如果可以你把原问题移到算法版去问下...
    我感觉就是要对字符串的不同排列做交集运算...楼主的思路是先找最长的字符串,这个不错,可问题有多个最长字符串,不排列就不能穷尽结果...
      

  6.   


    上例应该输出babcbad就行了。您没仔细看代码,不只是要改一个地方,从左边取的要改,从右边取的也要改。代码:
    Private Sub Form_Load()
    Dim s As String, sTmp As String, sLeft As String, sRight As String, sLong As String
    Dim sStrIn() As String
    Dim i As Byte, l As Byte
    s = "babc,abcba,cbad"
    's = "acb,acbbc,ef,b"
    's = "bbf,fbb,acbb"
    's = "a,bc,ca"
    's = "cabe,bef,abex"
    sStrIn = Split(s, ",")  '赋值给数组
    For i = 0 To UBound(sStrIn) '排序
        For l = i To UBound(sStrIn)
            If Len(sStrIn(i)) < Len(sStrIn(l)) Then
                sTmp = sStrIn(i)
                sStrIn(i) = sStrIn(l)
                sStrIn(l) = sTmp
            End If
        Next l
    Next isLong = sStrIn(0)  '最长的赋值给母串
    sLeft = sStrIn(0)
    sRight = sStrIn(0)
    For i = 1 To UBound(sStrIn)
        If InStr(sLeft, sStrIn(i)) = 0 Then    '把不包含的字符加到左边
            For l = 1 To Len(sStrIn(i))
                If InStr(Left(sLeft, Len(sStrIn(i)) - l), Right(sStrIn(i), Len(sStrIn(i)) - l)) Then '如果有部分包含在母字符串中
                    sLeft = Left(sStrIn(i), l) & sLeft  '添加不含的到左边部分
                    Exit For    '退出处理
                End If
            If l = Len(sStrIn(i)) Then sLeft = sStrIn(i) & sLeft    '都不含,全部加
            Next l
        End If
        
        If InStr(sRight, sStrIn(i)) = 0 Then    '把不包含的字符加到右边
            For l = 1 To Len(sStrIn(i))
                If InStr(Right(sRight, Len(sStrIn(i)) - l), Left(sStrIn(i), Len(sStrIn(i)) - l)) Then '如果有部分包含在母字符串中
                    sRight = sRight & Right(sStrIn(i), l)    '添加不含的到右边部分
                    Exit For    '退出处理
                End If
            If l = Len(sStrIn(i)) Then sRight = sRight & sStrIn(i)  '都不含,全部加
            Next l
        End If
        If Len(sRight) <> Len(sLeft) Then    ' 比较长度,不同取最短
            If Len(sRight) < Len(sLeft) Then    '取最短的
                sLong = sRight
            Else
                sLong = sLeft
            End If
            sLeft = sLong    '取最短的当作母字符串再去下一轮比较
            sRight = sLong
        End If
    Next i
    If Len(sLong) < Len(sLeft) Then '如果相同长度
        sLong = sLeft    '获得最终结果
        If Len(sLong) = Len(sRight) Then sLong = sLeft & "或者" & sRight
    End If
    Me.Caption = sLong  '输出
    End Sub
      

  7.   


    还是不行,如果是"babc","abcba","cbad",应输出“abcbabcbad”或"babcabcbad",而实际输出“abcbacd”!确实是我看错了,应是“babcbad",看来我被这题折磨透了!