DEV Community

J Fowler
J Fowler

Posted on • Edited on

Palindrome check a string in Go

This one is pretty common. Sounds difficult, but not really bad once you think it through.

Write a golang function to check if a string is a palindrome.

A palindrome is a sequence of characters that is the same even when reversed, for example:

  • "aba" is a palindrome

  • "abb is not

  • "ab a" is considered a palindrome by most, so we ignore whitespace.


func PalindromeCheck(str string) bool {
    trimmedStr := strings.ReplaceAll(str, " ", "")
    len := len(trimmedStr)
    chars := []rune(trimmedStr)
    for i := 0; i < len/2; i++ {
        if chars[i] != chars[len-i-1] {
            return false
        }
    }
    return true
}
Enter fullscreen mode Exit fullscreen mode

This solution is functionally the same as you will find for C or Java when searching online. We are essentially using dual pointers to traverse from the beginning and the end looking for a mismatched character. When a mismatch is found, we can declare the string is not a palindrome.

Can we make it better?
Is there a better way to trim whitespace rather than using strings.ReplaceAll? (there is but it can get ugly)
What about the efficiency of converting to an []rune, is there a better way?

Post your thoughts in the comments.

Thanks!

The code for this post and all posts in this series can be found here

Top comments (0)