Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで指定された制約を使用して、別の文字列から文字列を形成できるかどうかを確認します


2つの文字列小文字の文字列sとtがあるとします。次の制約を使用してsからtを生成できるかどうかを確認する必要があります-

  • tの文字はsにあります。たとえば、tに2つの「a」がある場合、sにも2つの「a」が必要です。

  • tのいずれかの文字がsにない場合は、前の2文字(前の2つのASCII値)がsにあるかどうかを確認します。たとえば、「f」がtに含まれているが、sには含まれていない場合、「d」と「e」をsから使用して「f」を作成できます。

したがって、入力がs ="pghn" t ="pin"の場合、「g」と「h」から「i」を作成して「pin」を作成できるため、出力はTrueになります。

これを解決するには、次の手順に従います-

  • freq:=sの各文字の頻度
  • 0からtのサイズの範囲のiについては、
    • freq [t [i]]がゼロ以外の場合、
      • freq [t [i]]:=freq [t [i]]-1
    • それ以外の場合、freq[t[i]の最初の前の文字]およびfreq[t [i]の2番目の前の文字]がゼロ以外の場合、
      • freq[t[i]の最初の前の文字]を1つ減らします
      • freq[t[i]の2番目の前の文字]を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

  1. Pythonでリストの文字列要素を連結することにより、指定された文字列を形成できるかどうかを確認します

    リストに存在する多数の文字列から必要な文字列を形成できるかどうかを確認する必要がある場合があります。また、必要な文字列を取得するために結合する必要のある文字列がリストにどのような順序で存在するかは重要ではありません。 順列あり itertoolsから、さまざまな順序でリスト内の文字列の可能な組み合わせを提供する順列関数を使用できます。与えられた組み合わせが必要な文字列と一致するとすぐに、文字列を形成できると結論付けます。 例 from itertools import permutations chk_str = 'balloon' Alist = ['fly

  2. 1つのPython文字列を別の文字列に追加します

    Pythonに文字列を追加することで、それらを連結して新しい文字列を取得します。これは、テキスト分析などの多くのシナリオで役立ちます。以下は、このタスクで検討する2つのアプローチです。 +=演算子の使用 +演算子は、数値の場合と同様に文字列に使用できます。唯一の違いは、文字列の場合、数値の加算ではなく連結が発生することです。 例 s1 = "What a beautiful " s2 = "flower " print("Given string s1 : " + str(s1)) print("Given string