缩短字符串中的重复序列

时间:2010-06-30 09:34:00

标签: vb.net string function

我在VB.NET中建立了一个博客平台,观众非常年轻,并且出于某种原因喜欢在评论中重复一系列字符来表达他们的承诺。

示例:

您好!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!! &3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; LT; 3'; 3'; 3 LOLOLOLOLOLOLOLOLOLOLOLOLLOLOLOLOLOLOLOLOLOLOLOLOL

..等等。

我不想完全过滤掉它,但是,我想将它缩短到最多5个重复字符或连续序列。 编写函数来处理单个重复字符没有问题。但是,过滤掉重复序列的最有效方法是什么?

这是我之前用于单个重复字符

的内容
Private Shared Function RemoveSequence(ByVal str As String) As String
    Dim sb As New System.Text.StringBuilder
    sb.Capacity = str.Length
    Dim c As Char
    Dim prev As Char = String.Empty
    Dim prevCount As Integer = 0

    For i As Integer = 0 To str.Length - 1
        c = str(i)
        If c = prev Then
            If prevCount < 10 Then
                sb.Append(c)
            End If
            prevCount += 1
        Else
            sb.Append(c)
            prevCount = 0
        End If
        prev = c
    Next

    Return sb.ToString
End Function

非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

您应该可以递归使用“Longest repeated substring problem”来解决此问题。在第一遍中,您将获得两个匹配的子字符串,并且需要检查它们是否是连续的。然后为其中一个子字符串重复该步骤。如果字符串不连续,或者字符串大小小于一定数量的字符,则切断算法。最后,您应该能够保留最后一场比赛,并丢弃其余的比赛。您需要挖掘实现:(

另请查看此前提出的问题:finding long repeated substrings in a massive string