Problem
I'm trying to find all of the possible combinations of capitalization for a String in Swift. For example, given the String
"abc", I would want my method to return an Array
of String
s, like this: ["Abc", "aBc", "abC", "ABc", "abc", "ABC", "aBC", "AbC"]
. The formula for the possible number of capitalization combinations is like this:
2i
where i
is the number of Characters
in the String
.
Attempted Solutions
I've tried the following function, via an extension to the String
type:
extension String {
func allPossibleCombinations() -> [String] {
let string = self
var result = [String]()
var current = string
result.append(current)
for i in 0..<string.count {
let index = string.index(string.startIndex, offsetBy: i)
if string[index].isLetter {
current = current.replacingCharacters(in: index...index, with: String(current[index]).uppercased())
result.append(current)
}
}
return result
}
}
This didn't work because it only returns capitalizations in order. For example, if I were to call this method on the String
"abc"
, it would return
["abc", "Abc", "ABc", "ABC"]
This should produce, as stated above, 8 different Strings
. I suspect that I need to factor in an exponent to my code, or potentially some form of randomly choosing a Character
.
Similar questions that are NOT duplicates
- This
Python
question discusses the same issue: Find all upper, lower and mixed case combinations of a string . However, this does not work for my issue because it is inPython
, notSwift
. - This
JavaScript
question talks about finding all combinations of aString
: Find all the combinations of a string Javascript . However, this is about general combinations, not capitalization ones, and is also in the wrong language. - This
JavaScript
question discusses the same issue: Find all lowercase and uppercase combinations of a string in Javascript . However, this is inJavaScript
, notSwift
. - This
C
question deals with the same issue: Finding all capital letter combinations of random text . However, it is inC
, notSwift
.
Summary
I am trying to make a function to get all possible capitalization forms of a String
. I have a current attempt, but it is not sufficient as it does not produce all possible options.
3条答案
按热度按时间l5tcr1uw1#
计算
0 ..< 2^length
范围内的整数,并使用二进制表示的位来告诉您何时将字母大写:示例
Alex的快速版
在评论中,Alex使用嵌套Map添加了这个Swifty版本:
vc9ivgsu2#
您可以遵循递归方法:
只需要取第一个字符,将其小写和大写,并将其前置到字符串其余部分的大写字母中。
doinxwow3#
使用
uniquePermutations
。