1

very new to programming and I am trying to solve a few Project Euler problems. I would like to know for a python code which identifies palindrome and non-palindrome. What is the most efficient way to do this? could you please show the code you find most efficient for this problem.

Mureinik
  • 297,002
  • 52
  • 306
  • 350
user3667054
  • 181
  • 1
  • 9
  • 2
    What have you tried so far? What do you think would be the most efficient way to do it? –  Jul 18 '15 at 04:11
  • Having done many many project euler questions with a `def isPali(x): return x==int(str(x)[::-1])`, I can tell you that it's not your palindrome check where you'll be wasting time. There's usually somewhere else to pull time from :P – NightShadeQueen Jul 18 '15 at 04:22
  • When you are writing your question, a list called "***Questions that may already have your answer***" appears. **Use** it. You can even use a fancy feature in your browser called "tabs" to open more than one page at once so you don't lose your place. – MattDMo Jul 18 '15 at 05:06
  • 1
    No need to be a jerk about it. – user3667054 Jul 20 '15 at 05:58

2 Answers2

3

You can do this very simply by just checking if the string that you input is equal to itself reversed (that's what a palindrome is).

def check_palindrome(s):
    return s == s[::-1]

[::-1] reverses the string because the -1 tells how many steps to go by and negative will go through the string in reverse.

If you will need to check if integers are palindromes, you can do:

def check_palindrome(s):
    return str(s) == str(s)[::-1]
michaelpri
  • 3,521
  • 4
  • 30
  • 46
2

I'm a big fan of simplicity over (potentially false) optimizations. Start with something straight forward, and move on from there:

def is_palindrom(s):
    length = len(s) 
    for i in range(length / 2):
        if s[i] != s[length - i - 1]:
            return False
    return True
Mureinik
  • 297,002
  • 52
  • 306
  • 350
  • 4
    Premature optimization is the root of all evil -- DonaldKnuth. – Cloud Jul 18 '15 at 04:16
  • Just a note that this will not work for odd lengthed palindromes – Spencer Wieczorek Jul 18 '15 at 04:17
  • @Mureinik That and you need to make the `range` a integer, `range(math.floor(length / 2))`. – Spencer Wieczorek Jul 18 '15 at 04:23
  • @SpencerWieczorek Without any version specification, I just assumed OP meant Python 2. In Python 3 you would be correct, of course. – Mureinik Jul 18 '15 at 04:31
  • lordy how many versions of python are they? and are they relatively the same? – user3667054 Jul 18 '15 at 04:35
  • @user3667054 Many, but the two people care about are 2.7 and 3.4 and those two are not compatible with each other. Personally, I like `range(length//2)` no matter which version I'm using, because it'll work the same for both. But they're not too different. – NightShadeQueen Jul 18 '15 at 04:39
  • "The First Rule of Program Optimization: Don't do it. The Second Rule of Program Optimization (for experts only!): Don't do it yet." — Michael A. Jackson – Dleep Jul 18 '15 at 05:05