我在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
非常感谢任何帮助
答案 0 :(得分:0)
您应该可以递归使用“Longest repeated substring problem”来解决此问题。在第一遍中,您将获得两个匹配的子字符串,并且需要检查它们是否是连续的。然后为其中一个子字符串重复该步骤。如果字符串不连续,或者字符串大小小于一定数量的字符,则切断算法。最后,您应该能够保留最后一场比赛,并丢弃其余的比赛。您需要挖掘实现:(
另请查看此前提出的问题:finding long repeated substrings in a massive string