Strings in Python:
Strings are simple text in programming, which might be individual letters, words, phrases, or whole sentences. Python strings have powerful text-processing capabilities, such as searching and replacing characters, cutting characters, and changing case. Empty strings are written as two quotations separated by a space. Single or double quotation marks may be used. Three quote characters can be used to easily build multi-line strings.
Given a string ,the task is to print all the permutations of the given string in lexicographic order without using recursion in Python.
Examples:
Example1:
Input:
given string ='hug'
Output:
printing all [ hug ] permutations : hug ugh uhg ghu guh hgu
Example2:
Input:
given string ='tork'
Output:
printing all [ tork ] permutations : tork trko trok kort kotr krot krto ktor ktro okrt oktr orkt ortk otkr otrk rkot rkto rokt rotk rtko rtok tkor tkro tokr
Program to Print All Permutations of a String in Lexicographic Order without Recursion
Below are the ways to Print All string permutations without recursion in lexicographic order:
Have you mastered basic programming topics of java and looking forward to mastering advanced topics in a java programming language? Go with these ultimate Advanced java programs examples with output & achieve your goal in improving java coding skills.
1)Using for and while Loops(Static Input)
Approach:
- Give the string as static input.
- The algorithm works by first generating a loop that will run n! times, where n is the length of the string.
- Each loop iteration produces the string and looks for its next variant to print in the following iteration.
- The following is the next higher permutation.
- If we call our sequence seq, we identify the least index p such that all entries in seq[p…end] are in decreasing order.
- If seq[p…end] represents the whole sequence, i.e. p == 0, then seq is the highest permutation. So we simply reverse the entire string to find the shortest permutation, which we regard to be the next permutation.
- If p > 0, we reverse seq[p…end].
Below is the implementation:
from math import factorial
def printPermutationsLexico(string):
# In lexicographic sequence, print all permutations of string s.
stringseq = list(string)
# There will be n! permutations where n = len (seq).
for t in range(factorial(len(stringseq))):
# print permutation by joining all the characters using join() function
print(''.join(stringseq))
# Find p such that seq[per:] is the longest sequence with lexicographic
# elements in decreasing order.
per = len(stringseq) - 1
while per > 0 and stringseq[per - 1] > stringseq[per]:
per -= 1
# reverse the stringsequence from per to end using reversed function
stringseq[per:] = reversed(stringseq[per:])
if per > 0:
# Find q such that seq[q] is the smallest element in seq[per:] and seq[q] is greater
# than seq[p - 1].Find q such that seq[q] is the smallest
# element in seq[per:] and seq[q] is greater than seq[per - 1].
q = per
while stringseq[per - 1] > stringseq[q]:
q += 1
# swapping seq[per - 1] and seq[q]
stringseq[per - 1], stringseq[q] = stringseq[q], stringseq[per - 1]
# given string as static input
given_string = 'hug'
# printing all the perumutations
print('printing all [', given_string, '] permutations :')
# passing given string to printPermutationsLexico function
printPermutationsLexico(given_string)
Output:
printing all [ hug ] permutations : hug ugh uhg ghu guh hgu
Explanation:
- User must give string input as static .
- On the string, the method printPermutationsLexico is called.
- The function then prints the string’s permutations in lexicographic order.
2)Using for and while Loops(User Input)
Approach:
- Enter some random string as user input using int(input()) function.
- The algorithm works by first generating a loop that will run n! times, where n is the length of the string.
- Each loop iteration produces the string and looks for its next variant to print in the following iteration.
- The following is the next higher permutation.
- If we call our sequence seq, we identify the least index p such that all entries in seq[p…end] are in decreasing order.
- If seq[p…end] represents the whole sequence, i.e. p == 0, then seq is the highest permutation. So we simply reverse the entire string to find the shortest permutation, which we regard to be the next permutation.
- If p > 0, we reverse seq[p…end].
Below is the implementation:
from math import factorial
def printPermutationsLexico(string):
# In lexicographic sequence, print all permutations of string s.
stringseq = list(string)
# There will be n! permutations where n = len (seq).
for t in range(factorial(len(stringseq))):
# print permutation by joining all the characters using join() function
print(''.join(stringseq))
# Find p such that seq[per:] is the longest sequence with lexicographic
# elements in decreasing order.
per = len(stringseq) - 1
while per > 0 and stringseq[per - 1] > stringseq[per]:
per -= 1
# reverse the stringsequence from per to end using reversed function
stringseq[per:] = reversed(stringseq[per:])
if per > 0:
# Find q such that seq[q] is the smallest element in seq[per:] and seq[q] is greater
# than seq[p - 1].Find q such that seq[q] is the smallest
# element in seq[per:] and seq[q] is greater than seq[per - 1].
q = per
while stringseq[per - 1] > stringseq[q]:
q += 1
# swapping seq[per - 1] and seq[q]
stringseq[per - 1], stringseq[q] = stringseq[q], stringseq[per - 1]
# Enter some random string as user input using int(input()) function.
given_string =input('Enter some random string = ')
# printing all the perumutations
print('printing all [', given_string, '] permutations :')
# passing given string to printPermutationsLexico function
printPermutationsLexico(given_string)
Output:
Enter some random string = epic printing all [ epic ] permutations : epic icep icpe iecp iepc ipce ipec pcei pcie peci peic pice piec ceip cepi ciep cipe cpei cpie ecip ecpi eicp eipc epci
Related Programs:
