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

Pythonで重複しないサブストリングの最大数を見つけるプログラム


小文字のみの文字列sがあるとすると、次のルールを満たすsの空でない部分文字列の最大数を見つける必要があります

  • 部分文字列は重複していません

  • 特定の文字chを含むサブストリングには、chのすべての出現箇所も含まれている必要があります。

これらの2つの条件を満たすサブストリングの最大数を見つける必要があります。同じ数の部分文字列を持つそのようなソリューションが複数ある場合は、最小の全長でそれを返します。

したがって、入力がs ="pqstpqqprrr"の場合、条件を満たす可能性のあるすべてのサブ文字列は["pqstpqqprrr"、 "pqstpqqp"であるため、出力は["s"、 "t"、"rrr"]になります。 、"st"、 "s"、 "t"、 "rrr"]

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

  • right:=sの右からすべての個々の文字chのインデックス位置のリストをソートします

  • 左:=右のすべてのiの文字s[i]のインデックスのリスト

  • :=空のリスト、gen:=空のリスト

  • 0から右のサイズまでの範囲のiの場合-1、実行

    • genの最後にs[right[i]]から新しい文字セットを挿入します

    • hasの最後にs[fromindex(left [i] + 1 to right [i] -1]-genの最後の項目)の部分文字列から新しい文字セットを挿入します

    • 範囲サイズが-2から0のjの場合、1ずつ減少します。

      • (has [j] AND last item of gen)がゼロ以外の場合

        • genの最後のアイテム:=genの最後のアイテムまたはgen[j]

        • hasの最後のアイテム:=(hasの最後のアイテムOR has [j])-genの最後のアイテム

        • has [j]、gen [j]

          を削除します
  • res:=新しいリスト、p_right:=-1

  • 範囲0からサイズが-1のindの場合、実行します

    • l:=s[i]がgen[ind]

      に存在する場合、左側のすべてのiの要素iのリストの最小値
    • r:=gen [ind]]

      のs[i]の場合、右側のすべてのiの要素iのリストの最大値
    • p_right

      • resの最後にs[インデックスlからr]の部分文字列を挿入します

      • p_right:=r

  • 解像度を返す

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

def solve(s):
   right = sorted([s.rindex(ch) for ch in set(s)])
   left = [s.index(s[i]) for i in right]
 
   has, gen = [], []
   for i in range(len(right)):
      gen.append(set(s[right[i]]))
      has.append(set(s[left[i] + 1:right[i]]) - gen[-1])

   for j in range(len(has) - 2, -1, -1):
      if (has[-1] & gen[j]) and (has[j] & gen[-1]):
         gen[-1] = gen[-1] | gen[j]
         has[-1] = (has[-1] | has[j]) - gen[-1]
         del has[j], gen[j]

   res, p_right = [], -1
   for ind in range(len(has)):
      l = min([i for i in left if s[i] in gen[ind]])
      r = max([i for i in right if s[i] in gen[ind]])
      if p_right < l:
         res.append(s[l : r + 1])
         p_right = r

   return res

s = "pqstpqqprrr"
print(solve(s))

入力

"pqstpqqprrr"

出力

['s', 't', 'rrr']

  1. リスト内で最大数を見つけるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 与えられたリスト入力では、与えられたリストの中で最大の数を見つける必要があります。 ここでは、2つのアプローチについて説明します 並べ替え手法の使用 組み込みのmax()関数を使用する アプローチ1-組み込みのsort()関数を使用する 例 list1 = [18, 65, 78, 89, 90] list1.sort() # main print("Largest element is:", list1[-1]) 出力 Largest element is:

  2. Pythonプログラムは最大3つ。

    3つの数abとcが与えられた場合、私たちのタスクは、与えられた数の中から最大の要素を見つけなければならないということです。 例 Input: a = 2, b = 4, c = 3 Output: 4 アルゴリズム Step 1: input three user input number. Step2: Add three numbers to list. Step 3: Using max() function to find the greatest number max(lst). Step 4: And finally we will print maximum numbe