How to check for palindrome in Swift using recursive definition

funct7 picture funct7 · Dec 28, 2015 · Viewed 15.8k times · Source

I like many of the features in Swift, but using manipulating strings are still a big pain in the ass.

func checkPalindrome(word: String) -> Bool {
    print(word)
    if word == "" {
        return true
    } else {
        if word.characters.first == word.characters.last {
            return checkPalindrome(word.substringWithRange(word.startIndex.successor() ..< word.endIndex.predecessor()))
        } else {
            return false
        }
    }
}

This code fails miserably whenever the string's length is an odd number. Of course I could make it so the first line of the block would be if word.characters.count < 2, but is there a way in Swift to get substrings and check easily?

Update I like many of the suggestions, but I guess the original question could be misleading a little, since it's a question about String more than getting the right results for the function.

For instance, in Python, checkPalindrome(word[1:-1]) would work fine for the recursive definition, whereas Swift code is much less graceful since it needs other bells and whistles.

Answer

Gigi picture Gigi · Jan 18, 2019
if word == String(word.reversed())
{
    return true
}
return false