使用Python检查我们是否可以在K个动作中转换字符串的程序

假设我们有两个字符串 s 和 t,我们必须检查是否可以在 k 次或更少的移动中将 s 转换为 t。在第 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 的大小不同,则

    • 返回错误

  • count := 一个数组(最小值为 1 和 (k - i + 1 +(k - i)/26)),用于从 0 到 25 的所有 i

  • 对于来自 s 的每个字符 c1 和来自 t 的 c2,做

    • diff :=(c2 的 ASCII - c1 + 26 的 ASCII) mod 26

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

    • 计数[差异] := 计数[差异] - 1

    • 返回错误

    • 如果 c1 与 c2 不同,则

    • 返回真

    让我们看看下面的实现来更好地理解

    示例

    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

    猜你喜欢