假设我们有两个长度相同的非空字符串s和t。我们必须将它们划分为子字符串,以使每对s和t子字符串的大小相同,并且它们是彼此的字谜。现在找到切割索引,以使切割的最大次数为s和t。如果未找到结果,则返回空列表。
因此,如果输入类似于s =“ bowcattiger” t =“ owbactietgr”,则输出将为[0,3,5,6,10],因为我们可以将字符串分成5个分区,每个字符串都是彼此的字谜。s = [“ bow”,“ ca”,“ t”,“ tige”,“ r”],t = [“ owb”,“ ac”,“ t”,“ ietg”,“ r”]
为了解决这个问题,我们将遵循以下步骤-
间隔:=一个新列表
cs:=包含以s表示字符及其频率的映射
ct:=带有t出现的字符及其频率的映射
如果cs与ct不同,则
返回新列表
对于x在s-1到0范围内的大小,执行
在间隔末尾插入x
cs [s [x]]:= cs [s [x]]-1
ct [t [x]]:= ct [t [x]]-1
如果cs与ct相同,则
排序列表间隔并返回
让我们看下面的实现以更好地理解-
from collections import Counter class Solution: def solve(self, a, b): intervals = [] ca = Counter(a) cb = Counter(b) if ca != cb: return [] for x in reversed(range(len(a))): ca[a[x]] -= 1 cb[b[x]] -= 1 if ca == cb: intervals.append(x) return sorted(intervals) ob = Solution() s = "bowcattiger" t = "owbactietgr" print(ob.solve(s, t))
"bowcattiger", "owbactietgr"
输出结果
[0, 3, 5, 6, 10]