假设我们有两个大小相同的字符串s和t。我们必须检查s和t是否相等。需要检查的条件很少:
他们俩是平等的。要么,
如果我们将s分为两个大小相同的连续子串,并且子串分别为s1和s2,并且还像s一样将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
左:= util(left half part of s)
对:= util(right half part of s)
返回(左连接右),(右连接左)的最小值
从主方法返回true时 util(s) 与...相同 util(t) 否则为假
让我们看下面的实现以更好地理解-
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