JavaScript程序检查字符串是否可以通过最多X次顺时针循环移位从另一个字符串形成


字符串的顺时针循环移位是指将字符串的字符旋转到字母顺序中的下一个字符。对于每次循环移位,字符都会转换为下一个字符,如果在某些旋转后没有字符存在(因为“z”是英语字母表的最后一个字符),那么在这种情况下,我们可以假设字符在循环中,并再次从英语字母表的第一个字符开始。

我们将得到两个字符串,我们可以最多旋转第一个字符串的每个字符x次,并在进行一定数量的所需和最大更改后,找出这两个字符串是否相等。如果这两个字符串在每次迭代的最大X次移位内相等,那么我们将打印yes,否则打印no。

示例

示例1

例如,我们得到字符串1:“abcdef”,第二个字符串是:“cccdfi”,并且可能的最大旋转次数为3。

输出:Yes

解释:对于第一个字符“a”,我们将旋转它2次,并将得到“c”

对于第二个字符“b”,我们将旋转它1次,并将得到“c”

无需旋转“c”和“d”。

对于字符“e”和“f”,我们需要分别旋转1次和3次。

因此,我们可以在最多3次旋转中从字符串1生成字符串2。

示例2

我们得到字符串1 'abcdef',第二个字符串是:'daddgh',并且可能的最大旋转次数为2。

输出:No

解释:对于第一个字符,我们需要三次旋转才能将“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)。

更新于: 2023年4月13日

114次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告