Php Program to Find Lexicographically smallest rotated sequence | Set 2
Last Updated :
10 Jan, 2022
Write code to find lexicographic minimum in a circular array, e.g. for the array BCABDADAB, the lexicographic minimum is ABBCABDAD
Input Constraint: 1 < n < 1000Â
Examples:Â
Â
Input: GEEKSQUIZ
Output: EEKSQUIZG
Input: GFG
Output: FGG
Input : CAPABCQ
Output : ABCQCAP
Â
We have discussed a O(n2Logn) solution in Lexicographically minimum string rotation | Set 1. Here we need to find the starting index of minimum rotation and then print the rotation.
Â
1) Initially assume 0 to be current min
starting index.
2) Loop through i = 1 to n-1.
a) For each i compare sequence starting
at i with current min starting index
b) If sequence starting at i is lexicographically
smaller, update current min starting
index.
Here is pseudo-code for algorithmÂ
Â
function findIndexForSmallestSequence(S, n):
result = 0
for i = 1:n-1
if (sequence beginning at i <
sequence beginning at result)
result = i
end if
end for
return result
Here is implementation of above algorithm.Â
Â
PHP
<?php
function compareSeq( $S , $x , $y , $n )
{
for ( $i = 0; $i < $n ; $i ++)
{
if ( $S [ $x ] < $S [ $y ])
return false;
else if ( $S [ $x ] > $S [ $y ])
return true;
$x = ( $x + 1) % $n ;
$y = ( $y + 1) % $n ;
}
return true;
}
function smallestSequence( $S , $n )
{
$index = 0;
for ( $i = 1; $i < $n ; $i ++)
if (compareSeq( $S , $index , $i , $n ))
$index = $i ;
return $index ;
}
function printSmallestSequence( $S , $n )
{
$starting_index = smallestSequence( $S , $n );
for ( $i = 0; $i < $n ; $i ++)
echo $S [( $starting_index + $i ) % $n ];
}
$S = "DCACBCAA" ;
$n = 8;
printSmallestSequence( $S , $n );
?>
|
Output:Â
Â
AADCACBC
Time Complexity : O(n^2)Â
Auxiliary Space : O(1)
Please refer complete article on Lexicographically smallest rotated sequence | Set 2 for more details!
Share your thoughts in the comments
Please Login to comment...