PHP 以获取相同字符串所需的最小旋转次数
在这个问题中,我们需要通过对字符串进行旋转来实现相同的字符串,并需要计算旋转次数。
解决这个问题有不同的方法,但在这里我们将学习一些PHP中的最佳方法。第一种方法使用旋转子字符串,另一种方法将字符串从特定索引处分成两部分。
问题陈述 - 我们有一个包含n个字符的字符串str。我们需要找到字符串的最小旋转次数,以便再次得到相同的字符串。
示例示例
输入
str = "bcbc";
输出
2
解释 − 在第一次旋转中,字符串变为’cbcb’,在第二次旋转中,字符串变为’bcbc’。所以,我们需要总共2次旋转才能再次得到原始字符串。
输入
str = "opqropqr"
输出
4
解释 - 当我们进行4次左旋转时,我们可以得到原始字符串。
输入
str = ‘lnm’
输出
3
解释 − 字符串不包含重复的字符串。因此,我们需要执行与字符串长度相等的总旋转次数。
方法1
在这种方法中,我们从每个索引处取长度等于str字符串长度的子字符串,并检查它是否等于str字符串。如果是,则问题的答案是p。
步骤
步骤1 − 使用“.”操作符将str字符串与自身组合。
步骤2 − 从索引1开始进行总共len次迭代。
步骤3 − 使用substr()方法,并传递参数。它接受一个字符串作为第一个参数,起始索引作为第二个参数,子字符串的长度作为第三个参数。
步骤4 − 如果str和结果字符串相等,则返回当前索引值。
步骤5 − 如果我们找不到字符串旋转,则最后返回len。
示例
<?php
function totalRotations(str){
// Merge the stringtmp = (str .str);
len = strlen(str);
// iterate the string
for (p = 1;p <= len;p++) {
// get a substring
substring = substr(tmp, p,len);
// return i, if the substring matches with the original string
if (str == substring)
returnp;
}
return len;
}str = "bcbc";
echo "The total numbers of rotations required to get the original string are: ";
echo totalRotations($str), "\n";
?>
输出
The total numbers of rotations required to get the original string are: 2
时间复杂度 − 在循环内部找到子字符串的时间复杂度为O(N^2)。
空间复杂度 − 存储子字符串的空间复杂度为O(N)。
我们学会了找到使得字符串相同所需的最小旋转次数。此外,用户可以解决需要找到使原始字符串还原的总右旋次数的问题,以进行更多训练。