 Open in App
Not now

# 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

 ` ``\$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!

My Personal Notes arrow_drop_up
Related Articles