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

Pythonで文字数がk以上の最長の部分文字列の長さを見つけるプログラム


各文字がソートされた文字列sがあり、数値kもあるとすると、すべての文字が少なくともk回出現するように、最長の部分文字列の長さを見つける必要があります。

したがって、入力がs ="aabccddeeffghij" k =2の場合、出力は8になります。これは、ここでの最長の部分文字列が "ccddeeff"であり、すべての文字が少なくとも2回出現するためです。

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

  • 関数rc()を定義します。これには時間がかかります
  • c:=すべての文字とその出現を含むマップ
  • acc:=新しいリスト
  • ans:=0
  • 有効:=真
  • lstのxごとに、
    • c [x]
    • 有効:=False
    • ans:=ansとrc(acc)の最大値
    • acc:=新しいリスト
  • それ以外の場合、
    • accの最後にxを挿入
  • 有効なtrueの場合、
    • accの戻りサイズ
  • それ以外の場合、
    • ans:=ansとrc(acc)の最大値
    • 回答を返す
  • メインの方法から、次の手順を実行します-
  • return rc(sの各文字を変換することによる新しいリスト)
  • 理解を深めるために、次の実装を見てみましょう-

    from collections import Counter
    class Solution:
          def solve(self, s, k):
             def rc(lst):
                c = Counter(lst)
                acc = []
                ans = 0
                valid = True
                for x in lst:
                   if c[x] < k:
                      valid = False
                      ans = max(ans, rc(acc))
                      acc = []
                   else:
                      acc.append(x)
                   if valid:
                      return len(acc)
                   else:
                      ans = max(ans, rc(acc))
                   return ans
                return rc(list(s))
    ob = Solution()
    s = "aabccddeeffghij"
    k = 2
    print(ob.solve(s, k))

    入力

    "aabccddeeffghij", 2

    出力

    8

    1. Pythonで連続する共通文字を含む部分文字列の長さを見つけるプログラム

      文字列sがあるとすると、同じ文字列を持つ最長の部分文字列の長さを見つける必要があります。 したがって、入力が「abbbaccabbbba」のような場合、4つの連続したbがあるため、出力は4になります。 これを解決するには、次の手順に従います- sのサイズが0の場合、 0を返す s:=s連結空白スペース ct:=1、tem:=1 範囲0からs-2のサイズのiの場合、実行 s[i]がs[i+ 1]と同じ場合、 tem:=tem + 1 それ以外の場合、 ct:=temとctの最大値 tem:=1 return ct 理解を深めるために、次の実装を見て

    2. Pythonで特定の文字列に含まれるk個の一意の文字を含む最長の部分文字列を検索します

      文字列があるとすると、正確にk個の一意の文字を持つ可能な限り長い部分文字列を返す必要があります。可能な限り長い長さの部分文字列が複数ある場合は、それらのいずれかを返します。 したがって、入力がs =ppqprqtqtqt、k =3の場合、長さ7であるため、出力はrqtqtqtになります。 これを解決するには、次の手順に従います- N:=26 関数is_ok()を定義します。これには数えられます、k val:=0 0からNの範囲のiの場合、実行 0の場合、 val:=val + 1 =val)の場合にtrueを返します メインの