Skip to content

125. Valid Palindrome


swift
// Solution 1

class Solution1 {
    func isPalindrome(_ s: String) -> Bool {
        var newString = ""
        for c in s {
            if c.isLetter || c.isNumber {
                newString.append(c.lowercased())
            }
        }
        let reversedString: String = String(newString.reversed())
        if newString == reversedString {
            return true
        }
        return false
    }
}

var solution1 = Solution1()

var testcase11 = solution1.isPalindrome("A man, a plan, a canal: Panama")
print(testcase11) // true

var testcase12 = solution1.isPalindrome("race a car")
print(testcase12) // false

var testcase13 = solution1.isPalindrome(" ")
print(testcase13) // true


// Solution 2

class Solution2 {
    func isPalindrome(_ s: String) -> Bool {
        var i = 0
        var j = s.count - 1
        let stringArray = s.map { c in
            return c
        }
        while i <= j {
            let ithCharacter = stringArray[i]
            if !ithCharacter.isLetter && !ithCharacter.isNumber {
                i += 1
                continue
            }
            let jthCharacter = stringArray[j]
            if !jthCharacter.isLetter && !jthCharacter.isNumber {
                j -= 1
                continue
            }
            if ithCharacter.lowercased() != jthCharacter.lowercased() {
                return false
            }
            i += 1
            j -= 1
        }
        return true
    }
}

var solution2 = Solution2()

var testcase21 = solution2.isPalindrome("A man, a plan, a canal: Panama")
print(testcase21) // true

var testcase22 = solution2.isPalindrome("race a car")
print(testcase22) // false

var testcase23 = solution2.isPalindrome(" ")
print(testcase23) // true

Released under the MIT License.