JavaScript 检查一个字符串是否可以通过最多X次顺时针旋转,从另一个字符串形成
字符串的循环顺时针旋转意味着将字符串的字符按字母顺序旋转到它们的下一个字符。对于每个循环移位,字符转换为下一个字符,并且如果在某些旋转之后没有字符存在(因为’z’是英文字母表的最后一个字符),那么对于该情况我们可以假设字符在循环中,并且再次从英文字母表的第一个字符开始。
我们将得到两个字符串,我们可以将第一个字符串的每个字符最多旋转x次,并在进行一定数量的必要和最大更改之后,找出两个字符串是否相等。如果两个字符串在每次迭代的最大X次移位之内相等,则打印“是”,否则打印“否”。
示例
示例1:
例如,我们得到的字符串1是:“abcdef”,第二个字符串是:“cccdfi”,最大旋转次数是3。
输出:是
解释:对于第一个字符’a’,我们将其旋转2次,得到’c’
对于第二个字符’b’,我们将其旋转1次,得到’c’
不需要旋转’c’和’d’。
对于字符’e’和’f’,我们分别需要旋转1次和3次。
所以,我们可以在最多3次旋转中从字符串1得到字符串2。
示例2:
我们得到的字符串1是’abcdef’,第二个字符串是:’daddgh’,最大旋转次数是2。
输出:否
解释:对于第一个字符,我们需要旋转3次才能将’a’转换为’d’,这超过了允许的最大次数。
对于第二个字符,我们需要旋转25次才能将’b’转换为’a’,这也超过了允许的最大次数。
类似地,对于’e’和’f’也是不可能的。
方法
通过上面的示例,我们可以得到一个思路,我们只需要遍历字符串一次,并检查每个字符。以下是实现步骤:
- 首先,我们将获取两个字符串的长度并比较它们,如果它们不相等,我们将无法将第一个字符串转换为另一个。
-
我们将遍历字符串,并针对每个字符检查两件事。
-
如果第二个字符串的字符比第一个字符串小,或者两个字符之间的差大于给定的数字。
-
如果上述情况成立,则我们无法达到目标并返回false。
-
否则,我们将返回true,并根据结果打印输出。
示例
// defining the function to check if the given string can
// be converted to another or not
function check(string1, string2, number){
// getting the length of the string1
var len1 = string1.length
var len2 = string2.length
// if length of both the given strings is not equal then its impossible
if(len1 != len2){
return false;
}
// traversing over the array
for(var i = 0; i<len1; i++) {
if(string1[i] > string2[i] || (string2[i]-string1[i] > number)){
return false;
}
}
return true;
}
// defining the string
var string1 = "abcdef";
var string2 = "cccdfi";
var number = 3;
if(check(string1,string2,number)){
console.log("Yes, we can convert string '" + string1 + "' to string '" + string2 + "' in given " + number + " number of rotations ");
}
else{
console.log("No, we cannot convert string '" + string1 + "' to string '" + string2 + "' in given " + number + " number of rotations ");
}
string2 = "daddgh"
number = 2;
if(check(string1,string2,number)){
console.log("Yes, we can convert string '" + string1 + "' to string '" + string2 + "' in given " + number + " number of rotations ");
}
else{
console.log("No, we cannot convert string '" + string1 + "' to string '" + string2 + "' in given " + number + " number of rotations ");
}
输出
Yes, we can convert string 'abcdef' to string 'cccdfi' in given 3 number of rotations
No, we cannot convert string 'abcdef' to string 'daddgh' in given 2 number of rotations
时间和空间复杂度
上述代码的时间复杂度为O(N),其中N是字符串中的字符数。我们只对字符串进行一次遍历,使得程序的时间复杂度为线性。
上述代码的空间复杂度为O(1),因为我们没有使用任何额外的空间。
结论
在本教程中,我们实现了一个JavaScript程序,用于给定的两个字符串和一个数字,该数字表示我们可以将一个字符旋转到顺时针方向的次数,任务是判断两个字符串是否相等。上述代码的时间复杂度为O(N),即线性复杂度,上述代码的空间复杂度为O(1)。