【发布时间】:2016-04-21 17:14:25
【问题描述】:
在下面的代码中,我试图通过所有可能的字母组合来确定运行时变量的字符数。
这段代码的目的是构建一种密码破解器,它基本上是暴力破解字符串。我想使用循环,因为一旦命中正确的组合,我就能够打破循环,从而节省时间和资源,否则如果我尝试在第一步中构建所有可能组合的数组,则将需要这些时间和资源。
我有一个静态代码,它适用于 5 个字符长的字符串,但实际上我的字符串可以是任意长度。如何使我的代码适用于任意长度的字符串?
let len = textField.text?.characters.count //Length of string
let charRange = "abcdefghijklmnopqrstuvwxyz" //Allowed characterset
for char1 in charRange.characters {
for char2 in charRange.characters {
for char3 in charRange.characters {
for char4 in charRange.characters {
for char5 in charRange.characters {
// Do whatever with all possible combinations
}
}
}
}
}
我想我必须以某种方式使用for totalChars in 1...len {,但不知道如何动态创建 for 循环?
【问题讨论】:
-
这是比 Swift 问题更多的算法问题。一种常见的方法是使用 recursion.
-
我不完全确定我是否理解这个问题,您是否只想找到一种方法来查找字符串中所有可能的字符组合?
-
@Oliver:我想针对问题字符串(一种密码破解器)尝试在一定字符串长度内允许的字母的所有可能组合。
-
对于 "a" ... "z" 中的 8 个字符,这将是 26^8 = 208827064576 个组合 ... :) 如果您每秒处理 10,000 个组合,那么您将需要大约 240 天.
-
@Martin:是的,我明白这一点,也明白完成它所需的资源。