- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在@Artur Udod 上回答了这个问题:
Print all the possible combinations of "X" amount of characters with "X" string length (Brute Force)
我修改了代码以返回字符串而不是 Char
的集合,并且还能够指定在生成的排列中是否允许字符重复:
Public Shared Function PermuteCharacters(ByVal charSet As IEnumerable(Of Char),
ByVal length As Integer,
ByVal isRepetitionAllowed As Boolean) As IEnumerable(Of String)
If length = 1 Then
Return charSet.Select(Function(c As Char)
Return New String(New Char() {c})
End Function)
Else
Return PermuteCharacters(charSet, length - 1, isRepetitionAllowed).
SelectMany(Function(x As String) charSet,
Function(str As String, c As Char)
Select Case isRepetitionAllowed
Case True
Return str & c
Case Else
' Firstly I need to check if string is empty because
' String.Contains() will throw an exception on empty strings.
' This need to be fixed to avoid empty strings.
If String.IsNullOrEmpty(str) Then
Return Nothing
End If
If Not str.Contains(c) Then
Return str & c
Else
Return Nothing
End If
End Select
End Function)
End If
End Function
用法示例:
Dim permutations As IEnumerable(Of String) =
PermuteCharacters("123456789", 2, isRepetitionAllowed:=False)
问题是,当我将重复设置为 False 时,该函数将创建、解析并返回空字符串,性能的负面影响会导致较大的集合或排列长度。
我知道我可以使用 IEnumerable.Distinct()
方法删除除一个以外的所有空字符串,但这会再次迭代整个大集合,从而对代码本身造成更多的负面影响。
我如何才能高效且正确地设计函数,同时考虑性能以及创建排列集合所需的总体执行时间?
重要的是,我不认为使用 LINQ 会降低性能,我会继续使用 LINQ,因为它允许开发精简的代码而不是像这样翻译 LINQ 查询所需的数千行普通循环。
PS:我的次要目标是在函数上实现 Iterator
关键字以进一步提高其性能,如果有人可以用解决方案来说明这个问题,同时实现 Iterator
功能,那就太棒了(和完美)。
最佳答案
我认为您不应该从 linq 开始,因为您似乎还没有掌握它。也许尝试更简单的构造:
Private Shared Iterator Function BuildCombination(distinctChars As IEnumerable(Of Char), usedChars As Stack(Of Char), length As Integer, everyCharIsDistinct As Boolean) As IEnumerable(Of String)
' we give the method everything it needs to work
Dim availableChars As IEnumerable(Of Char) = distinctChars
' what chars are available
If everyCharIsDistinct Then
availableChars = availableChars.Where(Function(c As Char) Not usedChars.Contains(c))
End If
' if the string to return is of length 1, every available char can be returned directly
If length = 1 Then
For Each availableChar As Char In availableChars
Yield New String(New Char()() = { availableChar })
Next
Else
' else we add each available char to the used list and we recurse to concat it with every possible substring
For Each availableChar As Char In availableChars
usedChars.Push(availableChar)
For Each possibleSubstring As String In Program.BuildCombination(distinctChars, usedChars, length - 1, everyCharIsDistinct)
Yield New String(New Char()() = { availableChar }) + possibleSubstring
Next
usedChars.Pop()
Next
End If
Return
End Function
使用这个包装器调用它,我们在其中设置列表并检查合理的参数:
Private Shared Sub FindCombinations(possibleChars As String, length As Integer, everyCharIsDistinct As Boolean)
If possibleChars.Length = 0 Then
Throw New InvalidOperationException()
End If
If everyCharIsDistinct AndAlso possibleChars.Length < length Then
Throw New InvalidOperationException()
End If
Dim distinctChars As IEnumerable(Of Char) = possibleChars.Distinct(Of Char)()
Dim listOfUsedChars As Stack(Of Char) = New Stack(Of Char)()
For Each s As String In Program.BuildCombination(distinctChars, listOfUsedChars, length, everyCharIsDistinct).ToList(Of String)()
Console.WriteLine(s)
Next
End Sub
关于.net - 修复此生成空字符串的排列生成器函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28764208/
我正在尝试用 Java 构建一个字符串,该字符串的长度最多为 3,最少为 1。 我正在根据整数数组的内容构建字符串,如果数组的内容为 -1,我想在字符串中输出一个空字符。否则字符串将包含整数的字符版本
我有一个类,其中有一个方法可以在字符串中包含 NUL 字符的情况下终止程序。具体表达是这样的: stringVar.indexOf('\u0000') < 0 这个字符串是通过 Scanner 从用户
我有一个 wchar_t 数组。我需要在数组中的特定位置添加一个 unicode 空字符。 wchar_t var1[100]; var1[79] = '\u0000'; 我尝试了上面的方法,但出现以
好吧,这听起来可能是重复的,但我已经尝试了所有可能性,例如 str.strip()、str.rstrip()、str.splitline (),还 if-else 检查像: if str is not
System.out.println("-----------------------------------------------------------"); System.out.pr
我有一个奇怪的问题。我从公司内部的许多不同应用程序接收数据,并将这些数据显示在网站上。根据发送数据的系统,数据本身可能在字符串中包含一些奇怪的字符。我的问题是我有一个用户可以搜索以允许其中包含此数据的
我遇到了 aSSL ,这似乎有几年历史了,想知道是否有人有其他“安全”AJAX 连接代码示例?显然,这不如使用 SSL 证书安全,但使用 null character SSL在那里进行攻击(最近针对
我有一个类似于以下内容的 pyspark 数据框: df = sql_context.createDataFrame([ Row(a=3, b=[4,5,6],c=[10,11,12], d='b
我有以下要执行的查询: MyModel.objects.annotate(current_name=Coalesce('nickname', 'name')).order_by('current_na
每当 rails 变量等于 nil(或者实际上每当我使用 rails 代码(参见第 3 个代码示例))时,我的 html 中就会得到一串空字符。 new.html.haml %h1.editable.
我是一名优秀的程序员,十分优秀!