File tree Expand file tree Collapse file tree 1 file changed +30
-11
lines changed Expand file tree Collapse file tree 1 file changed +30
-11
lines changed Original file line number Diff line number Diff line change 88
99class 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+ }
You can’t perform that action at this time.
0 commit comments