Write code to find lexicographic minimum in a circular array, e.g. for the array BCABDADAB, the lexicographic minimum is ABBCABDAD
Input Constraint: 1 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 iHere 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:
AADCACBCTime Complexity : O(n^2)
Auxiliary Space : O(1)
Please refer complete article on Lexicographically smallest rotated sequence | Set 2 for more details!