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 // PHP program to find lexicographically // smallest sequence with rotations. // Function to compare lexicographically // two sequence with different starting // indexes. It returns true if sequence // beginning with y is lexicographically // greater. 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 to find starting index // of lexicographically smallest // sequence function smallestSequence( $S , $n ) { $index = 0; for ( $i = 1; $i < $n ; $i ++) // if new sequence is smaller if (compareSeq( $S , $index , $i , $n )) // change index of current min $index = $i ; return $index ; } // Function to print lexicographically // smallest sequence function printSmallestSequence( $S , $n ) { $starting_index = smallestSequence( $S , $n ); for ( $i = 0; $i < $n ; $i ++) echo $S [( $starting_index + $i ) % $n ]; } // Driver Code $S = "DCACBCAA" ; $n = 8; printSmallestSequence( $S , $n ); // This code is contributed by Ajit. ?> |
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!
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!