Home > Mobile >  How does this python palindrome function work?
How does this python palindrome function work?

Time:02-15

can someone explain this function to me?

#from the geeksforgeeks website

  def isPalimdrome(str): 
    for i in range(0, int(len(str)/2)):
        if str[i] != str[len(str)-i-1]:
            return False
    return True

I dont understand the for loop and the if statement.

A - why is the range from 0 to length of the string divided by 2? B - what does "str[len(str)-i-1" do?

//sorry, ik I ask stupid questions

CodePudding user response:

1. why is the range from 0 to length of the string divided by 2?

That's because we don't need to iterate all the way through the string but just halfway through it.

2. what does "str[len(str)-i-1]" do?

It returns the ith element from the end ie for a string "noon" when i is 0 it will get str[3] ie n

P.S. str is a python keyword and shouldn't be used as variable names.

CodePudding user response:

To determine if a string is a palindrome, we can split the string in half and compare each letter of each half.

Consider the example

string ABCCBA

the range in the for loop sets this up by only iterating over the first n/2 characters. int(n/2) is used to force an integer (question A)

ex_str = 'ABCCBA'

for s in range(int(len(ex_str)/2)):
    print(ex_str[s])
A
B
C

we now have to look at the letters in the other half, CBA, in reverse order

adding an index to our example to visualize this

string ABCCBA
index  012345

to determine if string is a palindrome, we can compare indices 0 to 5, 1 to 4, and 2 to 3

len(str)-i-1 gives us the correct index of the other half for each i (question B)

example:

ex_str = 'ABCCBA'

for s in range(int(len(ex_str)/2)):
    print(f'compare index {s} to index {len(ex_str)-s-1}')
    print(f"{ex_str[s]} to {ex_str[len(ex_str) - s - 1]}")
compare index 0 to index 5
A to A
compare index 1 to index 4
B to B
compare index 2 to index 3
C to C

CodePudding user response:

for i in range(0, int(len(str)/2)):

Iterate through(go one by one from) 0(because in string first letter's index is 0) to half length of the string.

Why to only half length?

Because in a palindrome you need to compare only half length of string to the other half.

e.g., RADAR. 0=R, 1=A, 2=D, 3=A, 4=R. Number of letters = 5.

int(len(str)/2) will evaluate to 2. So first two letters will be compared with last two letters and middle one is common so will not be compared.

if str[i] != str[len(str)-i-1]:

Now, length of string is 5 but index of letters in string goes from 0 to 4, which is why len(str)-1 (5-1 = 4, i.e., last letter R).

len(str)-1-i Since i is a loop variable, it will be incremented by 1 every time for loop runs. In first run i is 0, in second 1....

The for loop will run two times.

str[i] != str[len(str)-1-i] will be evaluated as-

  1. 0 != 4 i.e. R != R FALSE
  2. 1 != 3 i.e. A != A FALSE

This code is not very readable and can be simplified as pointed out by others. This also reflects why code readability is important.

CodePudding user response:

Easiest way to check palindrome is this

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

Reading the string from the beginning is same as reading it reverse.

  • Related