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

文字列をPythonで一意のサブ文字列の最大数に分割することを見つけるプログラム


文字列sがあるとすると、指定された文字列を分割できる一意のサブ文字列の最大数を見つける必要があります。文字列を空でないサブ文字列の任意のリストに分割して、サブ文字列の連結が元の文字列を形成するようにすることができます。ただし、すべてが同じになるように部分文字列を分割する必要があります。

したがって、入力がs ="pqpqrrr"の場合、['p'、'q'、'pq'、'r'、'rr']のように分割できるため、出力は5になります。 ['p'、'q'、'p'、'q'、'r'、'rr']のように分割すると、ここでは'p'と'q'が複数回存在するため、無効になります。

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

  • res:=1つの要素のみを含むリスト0
  • 関数dfs()を定義します。これは、新しい空のセットであるs、パスを取ります
  • sが空の場合、
    • res [0]:=res[0]の最大値とパスのサイズ
    • 戻る
  • 1からsのサイズの範囲のiについては、
    • x:=s[インデックス0からi-1まで]のサブ配列
    • xがパスにない場合は、
      • dfs(sの部分文字列[インデックスiから終了まで]、パスU {x})
  • メインの方法から次のようにします-
  • dfs(s)
  • return res [0]

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

def solve(s):
   res = [0]
   def dfs(s, path=set()):
      if not s:
         res[0] = max(res[0], len(path))
         return
      for i in range(1, len(s)+1):
         x = s[:i]
         if x not in path:
            dfs(s[i:], path|{x})
   dfs(s)
   return res[0]
s = "pqpqrrr"
print(solve(s))

入力

"pqpqrrr"

出力

5

  1. Pythonでgodownに入れるボックスの数を見つけるためのプログラム

    整数を含む2つの配列があるとします。 1つのリストには、いくつかのユニット幅ボックスの高さが含まれ、別の配列には、godownの部屋の高さが含まれます。部屋には0...nの番号が付けられ、部屋の高さは配列godownのそれぞれのインデックスに示されます。ゴダウンに押し込める箱の数を調べなければなりません。いくつかの点に注意する必要があります ボックスを重ねることはできません。 ボックスの順序は変更できます。 ボックスは左から右にのみゴダウンに入れられます。 ボックスが部屋の高さよりも高い場合、そのボックスとその右側のすべてのボックスをゴダウンに押し込むことはできません。

  2. リスト内の最小数を見つけるPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −リストが表示されます。リストで利用可能な最小の番号を表示する必要があります ここでは、リストを並べ替えて最小の要素を取得するか、組み込みのmin()関数を使用して最小の要素を取得できます。 次に、以下の実装の概念を観察しましょう- 例 list1 = [101, 120, 104, 145, 99] # sorting using built-in function list1.sort() print("Smallest element is:", list1[0]) 出力 Smal