Given a string on length N. You can swap only the adjacent elements and each element can be swapped atmost once. Find the no of permutations of the string that can be generated after performing the swaps as mentioned.
Examples:
Input : 12345
Output : 12345 12354 12435 13245 13254
21345 21354 21435
Source: Goldman Sachs Interview
Consider any i-th character in the string. There are two possibilities for this character:
- Don’t swap it, i.e. don’t do anything with this character and move to the next character.
- Swap it. As it can be swapped with its adjacent,
- Swap it with the next character. Because each character can be swapped atmost once, we’ll move to the position (i+2).
- Swap it with the previous character – we don’t need to consider this case separately as i-th character is the next character of (i-1)th which is same as the case 2.a.
Implementation:
C++
#include <cstring>
#include <iostream>
using namespace std;
void findPermutations( char str[], int index, int n)
{
if (index >= n || (index + 1) >= n) {
cout << str << endl;
return ;
}
findPermutations(str, index + 1, n);
swap(str[index], str[index + 1]);
findPermutations(str, index + 2, n);
swap(str[index], str[index + 1]);
}
int main()
{
char str[] = { "12345" };
int n = strlen (str);
findPermutations(str, 0, n);
return 0;
}
|
Java
class GFG {
static void findPermutations( char str[], int index, int n) {
if (index >= n || (index + 1 ) >= n) {
System.out.println(str);
return ;
}
findPermutations(str, index + 1 , n);
swap(str, index);
findPermutations(str, index + 2 , n);
swap(str, index);
}
static void swap( char arr[], int index) {
char temp = arr[index];
arr[index] = arr[index + 1 ];
arr[index + 1 ] = temp;
}
public static void main(String[] args) {
char str[] = "12345" .toCharArray();
int n = str.length;
findPermutations(str, 0 , n);
}
}
|
Python3
def findPermutations(string, index, n):
if index > = n or (index + 1 ) > = n:
print (''.join(string))
return
findPermutations(string, index + 1 , n)
string[index], \
string[index + 1 ] = string[index + 1 ], \
string[index]
findPermutations(string, index + 2 , n)
string[index], \
string[index + 1 ] = string[index + 1 ], \
string[index]
if __name__ = = "__main__" :
string = list ( "12345" )
n = len (string)
findPermutations(string, 0 , n)
|
C#
using System;
public class GFG {
static void findPermutations( char []str, int index, int n) {
if (index >= n || (index + 1) >= n) {
Console.WriteLine(str);
return ;
}
findPermutations(str, index + 1, n);
swap(str, index);
findPermutations(str, index + 2, n);
swap(str, index);
}
static void swap( char []arr, int index) {
char temp = arr[index];
arr[index] = arr[index + 1];
arr[index + 1] = temp;
}
public static void Main() {
char []str = "12345" .ToCharArray();
int n = str.Length;
findPermutations(str, 0, n);
}
}
|
PHP
<?php
function findPermutations( $str , $index , $n )
{
if ( $index >= $n || ( $index + 1) >= $n )
{
echo $str , "\n" ;
return ;
}
findPermutations( $str , $index + 1, $n );
list( $str [ $index ],
$str [ $index + 1]) = array ( $str [ $index + 1],
$str [ $index ]);
findPermutations( $str , $index + 2, $n );
list( $str [ $index ],
$str [ $index + 1]) = array ( $str [ $index + 1],
$str [ $index ]);
}
$str = "12345" ;
$n = strlen ( $str );
findPermutations( $str , 0, $n );
?>
|
Javascript
<script>
function findPermutations(str, index, n) {
if (index >= n || index + 1 >= n) {
document.write(str.join( "" ) + "<br>" );
return ;
}
findPermutations(str, index + 1, n);
swap(str, index);
findPermutations(str, index + 2, n);
swap(str, index);
}
function swap(arr, index) {
var temp = arr[index];
arr[index] = arr[index + 1];
arr[index + 1] = temp;
}
var str = "12345" .split( "" );
var n = str.length;
findPermutations(str, 0, n);
</script>
|
Output12345
12354
12435
13245
13254
21345
21354
21435
This article is contributed by ekta1994. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.