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

Pythonで1つの文字列を別の文字列に1対1でマッピングできるかどうかを確認するプログラム


2つの小文字の文字列sがあり、sをtにマッピングできるように、sの各文字から別の文字(同じ文字の場合もある)への1対1のマッピングを作成できるかどうかを確認する必要があるとします。 (文字の順序は変更されません。)

したがって、入力がs ="papa"、t ="lili"のような場合、次のマッピングを作成できるため、出力はTrueになります: "p" to "l"、 "a"-> "i"

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

  • s_dict:=新しいマップ
  • t_dict:=新しい地図
  • 0からsサイズとtサイズの最小値までの範囲のiについては、
    • s [i]がs_dictに存在する場合、
      • s_dict [s[i]]がt[i]と同じでない場合、
        • Falseを返す
    • それ以外の場合、t [i]がt_dictに存在する場合、
      • t_dict [t[i]]がs[i]と同じでない場合、
        • Falseを返す
    • それ以外の場合、
      • s_dict [s [i]]:=t [i]
      • t_dict [t [i]]:=s [i]
  • Trueを返す

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

class Solution:
   def solve(self, s, t):
      s_dict = {}
      t_dict = {}
      for i in range(min(len(s), len(t))):
         if s[i] in s_dict:
            if s_dict[s[i]] != t[i]:
               return False
            elif t[i] in t_dict:
               if t_dict[t[i]] != s[i]:
                  return False
               else:
                  s_dict[s[i]] = t[i]
                  t_dict[t[i]] = s[i]
      return True
ob = Solution()
print(ob.solve("papa", "lili"))

入力

"papa", "lili"

出力

True

  1. Pythonで文字を時計回りにシフトすることで、ある文字列をチェックするプログラムを別の文字列に変換できます

    2つの文字列pとqがあり、数値rもあるとすると、最大r回時計回りにいくつかの文字をシフトしてpをqに変換できるかどうかを確認する必要があります。したがって、例として、「c」は2つの時計回りのシフトを使用して「e」に変換できます。 したがって、入力がp =abc、q =ccc、r =3の場合、2つの時計回りのシフトを使用して「a」を「c」に変換してから「時計回りに1シフト、合計3シフトでbをcに変換します。 これを解決するには、次の手順に従います- aのサイズがbのサイズと同じでない場合は、 Falseを返す kが0と同じで、aがbと同じでない場合、 Falseを返す su:

  2. 与えられた文字列がヘテログラムであるかどうかをチェックするPythonプログラム

    ここで1つの文字列が与えられ、次に私たちのタスクは、与えられた文字列がヘテログラムであるかどうかをチェックすることです。 ヘテログラムチェックの意味は、アルファベットの文字が2回以上出現しない単語、句、または文です。ヘテログラムは、アルファベットのすべての文字を使用するパングラムと区別される場合があります。 例 文字列はabcdefghi This is Heterogram (no alphabet repeated) 文字列はabcbcddfh This is not Heterogram. (b,c,d are repeated) アルゴリズム Step 1: first we