如何计算字符串中连续的字符
How to count the consecutive characters in a string
我不知道该怎么做。
这是场景。我需要计算要删除多少次,以便字符串中没有任何连续的字符。例如
AAABBBCCC = 6 个删除。 c 上 2,b 上 2,a 上 2 使其不连续。
感谢您的帮助。我正在写 VB.Net。
Public Module Tester
Public Sub Main()
Dim _inStr As String = "AAABBBBCCCCC"
Dim _reduced As Char() = _inStr.ToCharArray.Distinct().ToArray
Console.WriteLine("{0} >> {1}", _inStr, New String(_reduced))
For Each _c As Char In _reduced
Console.WriteLine("Char: {0} remove: {1}", _c, _inStr.Where(Function(x) x = _c).Count - 1)
Next
Console.ReadKey()
End Sub
End Module
输出:
AAABBBBCCCCC >> ABC
Char: A remove: 2
Char: B remove: 3
Char: C remove: 4
此方法适用于任何类型:
Shared Function CountConsecutiveDuplicates(Of T)(input As IEnumerable(Of T)) As Int32
Dim count As Int32 = 0
Dim comparer = EqualityComparer(Of T).Default
' optimization for lists and arrays: '
Dim listT = TryCast(input, IList(Of T))
If listT IsNot Nothing Then
If listT.Count <= 1 Then Return 0
For i As Int32 = 0 To listT.Count - 2
If comparer.Equals(listT(i), listT(i + 1)) Then
count += 1
End If
Next
Return count
End If
If Not input.Any() Then Return 0
Dim this As T = input.First()
For Each item As T In input.Skip(1)
If comparer.Equals(this, item) Then
count += 1
End If
this = item
Next
Return count
End Function
用法:
Dim numDeletes = CountConsecutiveDuplicates("AAABBBCCC") ' 6
您可以将其作为扩展方法:
Module GeneralExtensions
<Extension()>
Function CountConsecutiveDuplicates(Of T)(input As IEnumerable(Of T)) As Int32
Dim count As Int32 = 0
Dim comparer = EqualityComparer(Of T).Default
' optimization for lists and arrays: '
Dim listT = TryCast(input, IList(Of T))
If listT IsNot Nothing Then
If listT.Count <= 1 Then Return 0
For i As Int32 = 0 To listT.Count - 2
If comparer.Equals(listT(i), listT(i + 1)) Then
count += 1
End If
Next
Return count
End If
If Not input.Any() Then Return 0
Dim this As T = input.First()
For Each item As T In input.Skip(1)
If comparer.Equals(this, item) Then
count += 1
End If
this = item
Next
Return count
End Function
End Module
那你还可以这样使用:
Dim numDeletes = "AAABBBCCC".CountConsecutiveDuplicates()
我不明白你想如何计算要删除的内容或你打算如何处理结果,但简单地删除所有连续字符的简短解决方案可能如下所示:
Dim str as String = "AAABBBCCC"
For Each ch As Char In str
str = str.Replace(ch, "")
str = str & ch
Next
这将只是 return "ABC"。如果需要,您总是可以添加一些变量 and/or 输出来计算每个字符的删除。
我想你需要这样的东西,
Dim myString As String = "AAAABBCCCDDDDD"
Dim toDelete As List(Of Integer) = Nothing
Dim intLoopIndex As Integer = 0
Dim i As Integer
For i = 0 To myString.Length - 1
Do While myString(i).ToString = myString(i + 1).ToString
toDelete.Add(i + 1)
Loop
Next
Debug.WriteLine("You must delelte in total : " & toDelete.Count.ToString & " character(s)")
For k = 0 To toDelete.Count - 1
Debug.Write("Must delete the character from your string at position : " & toDelete(k).ToString)
Next
试试吧!和 :)
一起玩
我不知道该怎么做。 这是场景。我需要计算要删除多少次,以便字符串中没有任何连续的字符。例如
AAABBBCCC = 6 个删除。 c 上 2,b 上 2,a 上 2 使其不连续。
感谢您的帮助。我正在写 VB.Net。
Public Module Tester
Public Sub Main()
Dim _inStr As String = "AAABBBBCCCCC"
Dim _reduced As Char() = _inStr.ToCharArray.Distinct().ToArray
Console.WriteLine("{0} >> {1}", _inStr, New String(_reduced))
For Each _c As Char In _reduced
Console.WriteLine("Char: {0} remove: {1}", _c, _inStr.Where(Function(x) x = _c).Count - 1)
Next
Console.ReadKey()
End Sub
End Module
输出:
AAABBBBCCCCC >> ABC
Char: A remove: 2
Char: B remove: 3
Char: C remove: 4
此方法适用于任何类型:
Shared Function CountConsecutiveDuplicates(Of T)(input As IEnumerable(Of T)) As Int32
Dim count As Int32 = 0
Dim comparer = EqualityComparer(Of T).Default
' optimization for lists and arrays: '
Dim listT = TryCast(input, IList(Of T))
If listT IsNot Nothing Then
If listT.Count <= 1 Then Return 0
For i As Int32 = 0 To listT.Count - 2
If comparer.Equals(listT(i), listT(i + 1)) Then
count += 1
End If
Next
Return count
End If
If Not input.Any() Then Return 0
Dim this As T = input.First()
For Each item As T In input.Skip(1)
If comparer.Equals(this, item) Then
count += 1
End If
this = item
Next
Return count
End Function
用法:
Dim numDeletes = CountConsecutiveDuplicates("AAABBBCCC") ' 6
您可以将其作为扩展方法:
Module GeneralExtensions
<Extension()>
Function CountConsecutiveDuplicates(Of T)(input As IEnumerable(Of T)) As Int32
Dim count As Int32 = 0
Dim comparer = EqualityComparer(Of T).Default
' optimization for lists and arrays: '
Dim listT = TryCast(input, IList(Of T))
If listT IsNot Nothing Then
If listT.Count <= 1 Then Return 0
For i As Int32 = 0 To listT.Count - 2
If comparer.Equals(listT(i), listT(i + 1)) Then
count += 1
End If
Next
Return count
End If
If Not input.Any() Then Return 0
Dim this As T = input.First()
For Each item As T In input.Skip(1)
If comparer.Equals(this, item) Then
count += 1
End If
this = item
Next
Return count
End Function
End Module
那你还可以这样使用:
Dim numDeletes = "AAABBBCCC".CountConsecutiveDuplicates()
我不明白你想如何计算要删除的内容或你打算如何处理结果,但简单地删除所有连续字符的简短解决方案可能如下所示:
Dim str as String = "AAABBBCCC"
For Each ch As Char In str
str = str.Replace(ch, "")
str = str & ch
Next
这将只是 return "ABC"。如果需要,您总是可以添加一些变量 and/or 输出来计算每个字符的删除。
我想你需要这样的东西,
Dim myString As String = "AAAABBCCCDDDDD"
Dim toDelete As List(Of Integer) = Nothing
Dim intLoopIndex As Integer = 0
Dim i As Integer
For i = 0 To myString.Length - 1
Do While myString(i).ToString = myString(i + 1).ToString
toDelete.Add(i + 1)
Loop
Next
Debug.WriteLine("You must delelte in total : " & toDelete.Count.ToString & " character(s)")
For k = 0 To toDelete.Count - 1
Debug.Write("Must delete the character from your string at position : " & toDelete(k).ToString)
Next
试试吧!和 :)
一起玩