查找按字典顺序排列的最小旋转序列的 PHP 程序设置 2
编写代码以查找圆形数组中的字典最小值,例如对于数组 BCABDADAB,字典最小值为 ABBCABDAD
输入约束:1 < n < 1000
例子:
Input: GEEKSQUIZ
Output: EEKSQUIZG
Input: GFG
Output: FGG
Input : CAPABCQ
Output : ABCQCAP
我们已经讨论了字典最小字符串旋转中的 O(n 2 Logn) 解决方案 |设置1。这里我们需要找到最小旋转的起始索引,然后打印旋转。
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.
这是算法的伪代码
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
这是上述算法的实现。
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.
?>
输出:
AADCACBC
时间复杂度: O(n^2)
辅助空间: O(1)
请参阅有关按字典顺序排列的最小旋转序列的完整文章 |设置2了解更多详情!