Skip to content

Commit 2a9f404

Browse files
committed
[String] Update solution to Valid Palindrome
1 parent ba4f850 commit 2a9f404

File tree

1 file changed

+30
-11
lines changed

1 file changed

+30
-11
lines changed

String/ValidPalindrome.swift

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,40 @@
88

99
class ValidPalindrome {
1010
func isPalindrome(_ s: String) -> Bool {
11-
// Make String into an array of lowercase Characters
12-
let characters = s.lowercased().characters
11+
var i = 0, j = s.count - 1
12+
let sChars = Array(s.lowercased())
1313

14-
// Only keep alphanumeric characters.
15-
let cleaned = characters.filter { character in
16-
return character.description.rangeOfCharacter(from: CharacterSet.alphanumerics) != nil
17-
}
18-
19-
// Compare values at mirroring indices.
20-
let total = cleaned.count
21-
for i in 0 ..< total/2 {
22-
if cleaned[i] != cleaned[total - 1 - i] {
14+
while i < j {
15+
while !sChars[i].isAlphanumeric && i < j {
16+
i += 1
17+
}
18+
19+
while !sChars[j].isAlphanumeric && i < j {
20+
j -= 1
21+
}
22+
23+
if sChars[i] != sChars[j] {
2324
return false
25+
} else {
26+
i += 1
27+
j -= 1
2428
}
2529
}
30+
2631
return true
2732
}
2833
}
34+
35+
extension Character {
36+
var isAlpha: Bool {
37+
return (Character("a")...Character("z")).contains(self)
38+
}
39+
40+
var isNumeric: Bool {
41+
return (Character("0")...Character("9")).contains(self)
42+
}
43+
44+
var isAlphanumeric: Bool {
45+
return isAlpha || isNumeric
46+
}
47+
}

0 commit comments

Comments
 (0)