-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy path11_threeLetterDiff.swift
36 lines (30 loc) · 1.39 KB
/
11_threeLetterDiff.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// Challenge 11: Three Different Letters
// Write a function that accepts two strings, and returns true if they are
// identical in length but have no more than three different letters.
func threeLetterDiff(_ input1: String, _ input2: String) -> Bool {
if input1.characters.count != input2.characters.count { return false }
var difference = 0
for letter in input1.characters {
if input2.characters.contains(letter) == false {
difference += 1
}
if difference > 3 { return false }
}
return true
}
print("---------------")
print(threeLetterDiff("One", "Three")) // false - different length
print(threeLetterDiff("String", "Threes")) // false - 4 letter difference
print(threeLetterDiff("Hello", "World")) // true - 3 letter difference
print(threeLetterDiff("Clamp", "Cramp")) // true - 1 letter difference
//Swift 4
func threeLetterDiff2(_ strOne: String, _ strTwo: String) -> Bool {
guard strOne.count == strTwo.count else { return false }
let setOne = Set(strOne)
return setOne.subtracting(strTwo).count <= 3
}
print("---------------")
print(threeLetterDiff2("One", "Three")) // false - different length
print(threeLetterDiff2("String", "Threes")) // false - 4 letter difference
print(threeLetterDiff2("Hello", "World")) // true - 3 letter difference
print(threeLetterDiff2("Clamp", "Cramp")) // true - 1 letter difference