使用Python编写检查字符串是否可以在K步内转换的程序

使用Python编写检查字符串是否可以在K步内转换的程序

假设我们有两个字符串s和t,我们必须检查是否可以将s转换为t,最多需要k步。在第i步中,您可以执行以下操作。

  • 选择在s中的任何索引j(从1开始),使得1 <= j <= s的大小,并且j在任何先前的移动中都没有被选择,并将该索引处的字符移动i次。

  • 保持原样。

此处移动字符意味着将其替换为字母表中的下一个字母(如果字母是“z”,则将其包装到“a”)。因此,将字符移动i次表示应用i次移位操作。

因此,如果输入是s =“poput”t =“vwput”k = 9,则输出将为True,因为在i = 6处,我们可以将’p’转换为’v’,而在i = 8处,我们可以将’o’转换为’w’。

为了解决这个问题,我们将遵循以下步骤:

  • 如果s的大小与t的大小不同,则
    • 返回False
  • count:对于i从0到25的所有最小值为1且( k-i+1+(k-i)/26),都需要保持

  • 对于s的每个字符c1和t的每个字符c2,做如下操作

    • 如果c1与c2不相同,则
      • diff:(c2的ASCII – c1的ASCII + 26)mod 26

      • 如果count [diff] <= 0,则

      • 返回False

      • count [diff]:= count [diff] – 1

  • 返回True

让我们看以下实现以更好地理解

示例

def solve(s, t, k):
   if len(s) != len(t):
      return False
   count = [min(1, k - i + 1) + (k - i)//26 for i in range(26)]
   for c1, c2 in zip(s, t):
      if (c1 != c2):
         diff = (ord(c2) - ord(c1) + 26) % 26
         if count[diff] <= 0:
            return False
         count[diff] -= 1
   return True
s = "poput"
t = "vwput"
k = 9
print(solve(s, t,k))

输入

 "poput",“vwput”,9 

产量

True

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程