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

Pythonで、ある文字列の文字の頻度が他の文字列の同じ文字の頻度の因数または倍数であるかどうかを確認します


2つの文字列sとtがあるとすると、sでの文字の出現が複数であるか、tでの因数であるかを確認する必要があります。

したがって、入力がs ="xxyzzw" t ="yyyxxxxzz"の場合、sのxの頻度は2であり、tは4であるため、出力はTrueになります。は3つのyであり、sとtには同じ数のzがあり、sには1つのwがありますが、tにはありません。

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

  • s_freq:=sのすべての文字とその頻度を含むマップ
  • t_freq:=tのすべての文字とその頻度を含むマップ
  • s_freqの各chについて、
    • chがt_freqにない場合は、
      • 次の反復に進む
    • t_freq[ch]がs_freq[ch]で割り切れる場合、またはs_freq[ch]がt_freq[ch]で割り切れる場合、
      • 次の反復に進む
    • それ以外の場合、
      • Falseを返す
  • Trueを返す

理解を深めるために、次の実装を見てみましょう-

from collections import defaultdict
def solve(s, t):
   s_freq = defaultdict(int)
   t_freq = defaultdict(int)
   for i in range(0, len(s)):
      s_freq[s[i]] += 1
   for i in range(0, len(t)):
      t_freq[t[i]] += 1
   for ch in s_freq:
      if ch not in t_freq:
         continue
      if t_freq[ch] % s_freq[ch] == 0 or s_freq[ch] % t_freq[ch] == 0:
         continue
      else:
         return False
   return True
s = "xxyzzw"
t = "yyyxxxxzz"
print(solve(s, t))

入力

"xxyzzw", "yyyxxxxzz"

出力

True

  1. PythonでDFAを使用して、バイナリ文字列が3の倍数であるかどうかを確認します

    任意の数のバイナリ表現を表す配列nがあるとします。 Deterministic Finite Automata DFAを使用して、そのバイナリ表現が3で割り切れるかどうかを確認する必要があります。 したがって、入力がn =[1、1、0、0](12のバイナリ)のような場合、出力はTrueになります。 これを解決するために、以下のようにDFAを構築できます- 数値が3で割り切れる場合、余りは0になり、そうでない場合、余りは1または2になります。これらの3つの余りには、3つの状態があります。余りが0の場合、数値が除算可能であることを意味するため、初期状態も最終状態です。 これを解決する

  2. 文字列内の文字がPythonの文字であるかどうかを確認するにはどうすればよいですか?

    文字列クラスのisalpha()メソッドを使用できます。文字列がアルファベットのみで構成されているかどうかをチェックします。また、文字がアルファベットかどうかを確認するためにも使用できます。たとえば、5番目のインデックスの文字が文字かどうかを確認する場合は >>> s = "Hello people" >>> s[4].isalpha() True 文字列がアルファベットかどうかを確認することもできます。たとえば、 >>> s = "Hello people" >>> s.isal