Python program to sort Palindrome Words in a Sentence
Given a string S representing a sentence, the task is to reorder all the palindromic words present in the sentence in sorted order.
Examples:
Input: S = “Please refer to the madam to know the level”
Output: Please level to the madam to know the refer
Explanation: Here “refer”, “madam”, “level” are the palindromic words. Sorting them generates the sequence {“level”, “madam”, “refer”}.Input: S = “refer to dad”
Output: dad to refer
Approach: Follow the steps below to solve the problem:
- Iterate over the characters of the string.
- Split the words in the sentence by spaces using split() and store it as a list, say lis.
- Store all the palindromic words present in the sentence S in a list, say newlis[].
- Sort the list newlis[] using sort() function.
- Initialize a pointer, say j = 0.
- Traverse the list lis and replace all the palindromic words with newlis[j] and increment j by 1.
- Print the updated sentence
Below is the implementation of the above approach:
Python3
# Python implementation of above program # Function to check if a # string is a palindrome or not def palindrome(string): if (string = = string[:: - 1 ]): return True else : return False # Function to print the updated sentence def printSortedPalindromes(sentence): # Stores palindromic words newlist = [] # Stores the words split by spaces lis = list (sentence.split()) # Traversing the list for i in lis: # If current word is palindrome if (palindrome(i)): # Update newlist newlist.append(i) # Sort the words in newlist newlist.sort() # Pointer to iterate newlis j = 0 # Traverse the list for i in range ( len (lis)): # If current word is palindrome if (palindrome(lis[i])): # Replacing word with # current word in newlist lis[i] = newlist[j] # Increment j by 1 j = j + 1 # Print the updated sentence for i in lis: print (i, end = " " ) # Driver Code sentence = "please refer to the madam to know the level" printSortedPalindromes(sentence) |
please level to the madam to know the refer
Time Complexity : O(N * logN)
Auxiliary Space : O(N)
Method #2: Using lambda functions
Python3
# Python implementation of above program # Function to print the updated sentence def printSortedPalindromes(sentence): # Stores palindromic words newlist = [] # Stores the words split by spaces lis = list (sentence.split()) newlist = list ( filter ( lambda x: x = = x[:: - 1 ], lis)) # Sort the words in newlist newlist.sort() # Pointer to iterate newlis j = 0 # Traverse the list for i in range ( len (lis)): # If current word is palindrome if (lis[i] = = lis[i][:: - 1 ]): # Replacing word with # current word in newlist lis[i] = newlist[j] # Increment j by 1 j = j + 1 # Print the updated sentence for i in lis: print (i, end = " " ) # Driver Code sentence = "please refer to the madam to know the level" printSortedPalindromes(sentence) |
please level to the madam to know the refer
Time Complexity: O(nlogn)
Auxiliary Space: O(n)
Method #3: Using regular expressions:
Algorithm:
- Split the given sentence into words using regular expressions.
- Create a list of palindromic words.
- Sort the list of palindromes in lexicographically ascending order.
- Replace the palindromic words in the original sentence with sorted palindromes.
- Print the updated sentence.
Python3
import re def printSortedPalindromes(sentence): # Use regular expressions to split the sentence into words words = re.findall(r '\b\w+\b' , sentence) # Create a list of palindromic words palindromes = [word for word in words if word = = word[:: - 1 ]] # Sort the list of palindromes palindromes.sort() # Replace palindromic words in the original sentence with sorted palindromes for i, word in enumerate (words): if word = = word[:: - 1 ]: words[i] = palindromes.pop( 0 ) # Print the updated sentence print ( ' ' .join(words)) # Driver code sentence = "please refer to the madam to know the level" printSortedPalindromes(sentence) # This code is contributed by Jyothi pinjala |
please level to the madam to know the refer
Time complexity:
The regular expression to split the sentence into words has a time complexity of O(n), where n is the length of the sentence.
Auxiliary Space:
The regular expression to split the sentence into words and the list of palindromic words both require additional space to store intermediate data, but the space usage is proportional to the size of the input and the number of palindromes, respectively. Therefore, the space complexity of the function is O(n + m).has context menu
Method #4: Using reduce():
- Define a function called “update_sentence” that takes two arguments: a list of palindromic words and a word.
If the word is a palindrome, append it to the list of palindromic words and return the updated list. - Define another function called “printSortedPalindromes” that takes a sentence as its argument.
Use regular expressions to split the sentence into words and store them in a list called “words”. - Apply the reduce function to the list of words and the update_sentence function to create a list of palindromic words.
- Sort the list of palindromic words in ascending order.
- Loop through the list of words and replace any palindromic words with the corresponding word from the sorted list of palindromic words.
- Print the updated sentence.
- Call the “printSortedPalindromes” function with a sample sentence to test the code.
Python3
import re from functools import reduce def update_sentence(palindromes, word): if word = = word[:: - 1 ]: palindromes.append(word) return palindromes def printSortedPalindromes(sentence): # Use regular expressions to split the sentence into words words = re.findall(r '\b\w+\b' , sentence) # Create a list of palindromic words palindromes = reduce (update_sentence, words, []) # Sort the list of palindromes palindromes.sort() # Replace palindromic words in the original sentence with sorted palindromes for i, word in enumerate (words): if word = = word[:: - 1 ]: words[i] = palindromes.pop( 0 ) # Print the updated sentence print ( ' ' .join(words)) # Driver code sentence = "please refer to the madam to know the level" printSortedPalindromes(sentence) # This code is contributed by Rayudu. |
please level to the madam to know the refer
Time complexity: O(n log n) because of the sorting operation performed on the list of palindromes.
Auxiliary space: O(n) because the code uses a list to store the palindromes and another list to store the words. The reduce function uses constant space because it does not create any new lists.
Please Login to comment...