检查Python中是否可以使用给定约束条件从另一个字符串形成一个字符串


假设我们有两个小写字符串s和t。我们必须检查是否可以使用以下约束条件从s生成t:

  • t的字符存在于s中,例如,如果t中有两个'a',则s中也应该有两个'a'。

  • 当t中的任何字符不在s中时,检查s中是否存在前两个字符(前两个ASCII值)。例如,如果'f'在t中但不在s中,则可以使用s中的'd'和'e'来构成'f'。

因此,如果输入类似于s = "pghn" t = "pin",则输出将为True,因为我们可以使用'g'和'h'来构成'i'从而构成"pin"。

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

  • freq := s中每个字符的频率
  • 对于范围0到t的大小,执行以下操作:
    • 如果freq[t[i]]不为零,则
      • freq[t[i]] := freq[t[i]] - 1
    • 否则,如果freq[t[i]的前一个字符]和freq[t[i]的前两个字符]不为零,则
      • 将freq[t[i]的前一个字符]减少1
      • 将freq[t[i]的前两个字符]减少1
    • 否则,
      • 返回False
  • 返回True

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

示例

在线演示

from collections import defaultdict
def solve(s, t):
   freq = defaultdict(lambda:0)
   for i in range(0, len(s)):
      freq[s[i]] += 1
   for i in range(0, len(t)):
      if freq[t[i]]:
         freq[t[i]] -= 1
      elif (freq[chr(ord(t[i]) - 1)] and freq[chr(ord(t[i]) - 2)]):
         freq[chr(ord(t[i]) - 1)] -= 1
         freq[chr(ord(t[i]) - 2)] -= 1
      else:
         return False
   return True
s = "pghn"
t = "pin"
print(solve(s, t))

输入

"pghn", "pin"

输出

True

更新于:2020-12-29

260 次查看

开启你的职业生涯

完成课程后获得认证

开始
广告
© . All rights reserved.