根据给定条件检查Python中两个字符串是否等价


假设我们有两个大小相同的字符串 s 和 t。我们必须检查 s 和 t 是否等价。

  • 它们都相等。或者,
  • 如果我们将 s 分成两个大小相同的连续子字符串,子字符串为 s1 和 s2,并将 t 同样分成 t1 和 t2,则以下之一应有效:
    • s1 递归地等价于 t1,s2 递归地等价于 t2
    • s1 递归地等价于 t2,s2 递归地等价于 t1

因此,如果输入类似于 s = "ppqp" t = "pqpp",则输出将为 True,因为如果我们将 s 和 t 分成两部分 s1 = "pp",s2 = "qp" 和 t1 = "pq",t2 = "pp",这里 s1 = t2,如果我们将 s2 和 t1 分成两部分 s21 = "q",s22 = "p",t11 = "p",t12 = "q",这里也有 s21 = t12 和 s22 = t11,所以它们是递归等价的。

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

  • 定义一个函数 util()。这将接收 s。
  • 如果 s 的大小是奇数,则
    • 返回 s
  • left := util(s 的左半部分)
  • right := util(s 的右半部分)
  • 返回 (left 连接 right) 和 (right 连接 left) 的最小值
  • 在主方法中,当 util(s) 与 util(t) 相同时返回 true,否则返回 false

让我们看看下面的实现,以便更好地理解:

示例代码

在线演示

def util(s):
   if len(s) & 1 != 0:
      return s
 
   left = util(s[0:int(len(s) / 2)])
   right = util(s[int(len(s) / 2):len(s)])
 
   return min(left + right, right + left)
 
def solve(s,t):
   return util(s) == util(t)

s = "ppqp"
t = "pqpp"
print(solve(s, t))

输入

"ppqp", "pqpp"

输出

True

更新于:2021年1月16日

330 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.