Suppose we have a string s. This string can contain lowercase characters, other special characters and numbers. We have to check whether only the letters present in the string are palindromic or not. Here one constraint is that there we are not allowed to use extra space to solve this problem.
So, if the input is like s = "ra$5ce58car", then the output will be True, as the letters are forming "racecar" which is palindrome.
To solve this, we will follow these steps −
- Define a function first_letter_index() . This will take str, left, right
- index := -1
- for i in range left to right + 1, do
- if str[i] is lower case alphabet, then
- index := i
- come out from loop
- if str[i] is lower case alphabet, then
- return index
- Define a function last_letter_index() . This will take str, left, right
- index := -1
- for i in range left to right - 1, decrease by 1, do
- if str[i] is lower case alphabet, then
- index := i
- come out from loop
- return index
- From the main method do the following:
- left := 0, right := size of str - 1
- flag := True
- for i in range 0 to size of str, do
- left := first_letter_index(str, left, right)
- right := last_letter_index(str, right, left)
- if right < 0 or left < 0, then
- come out from loop
- if str[left] is same as str[right], then
- left := left + 1
- right := right - 1
- go for next iteration
- flag := False
- come out from loop
- if str[i] is lower case alphabet, then
- return flag
Let us see the following implementation to get better understanding −
Example Code
def first_letter_index(str, left, right): index = -1 for i in range(left, right + 1): if str[i] >= 'a' and str[i] <= 'z' : index = i break return index def last_letter_index(str, left, right): index = -1 for i in range(left, right - 1, -1) : if str[i] >= 'a' and str[i] <= 'z': index = i break return index def solve(str): left = 0 right = len(str) - 1 flag = True for i in range(len(str)) : left = first_letter_index(str, left, right) right = last_letter_index(str, right, left) if right < 0 or left < 0: break if str[left] == str[right]: left += 1 right -= 1 continue flag = False break return flag s = "ra$5ce58car" print(solve(s))
Input
"ra$5ce58car"
Output
True