程序对两个字符串进行分区,以使每个分区在Python中形成点字符号

假设我们有两个长度相同的非空字符串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]
猜你喜欢