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

Pythonを使用して最長の素敵な部分文字列を見つけるプログラム


文字列sがあるとします。 sの最長の素敵な部分文字列を見つける必要があります。文字列sの場合、sのアルファベットのすべての文字について、大文字と小文字の両方で表示されると便利です。そのような部分文字列が複数ある場合は、最も早い部分文字列を返します。

したがって、入力がs ="ZbybBbz"のような場合、これには小文字と大文字のBが含まれるため、出力は"bBb"になります。

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

  • cur_max:=-1

  • res:=空白の文字列

  • 0からsのサイズの範囲のiの場合、実行します

    • c:=s [i]

    • アッパー:=新しいセット

    • 下:=新しいセット

    • cが小文字の場合、

      • 下にcを追加

    • cが大文字の場合、

      • cを大文字に追加しますが、小文字に変換する前に

    • i + 1からsのサイズまでの範囲のjについては、次のようにします

      • c:=s [j]

      • cが小文字の場合、

        • 下にcを追加

      • cが大文字の場合、

        • cを大文字に追加しますが、小文字に変換する前に

      • 上部が下部と同じ場合、

        • j-i> cur_maxの場合、

          • cur_max:=j-i

          • res:=sの部分文字列[インデックスiからj+ 1]

  • 解像度を返す

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

def solve(s):
   cur_max= -1
   res=""
   for i in range(len(s)):
      c = s[i]
      upper = set()
      lower = set()
      if c.islower():
         lower.add(c)
      if c.isupper():
         upper.add(c.lower())
      for j in range(i+1,len(s)):
         c = s[j]
         if c.islower():
            lower.add(c)
         if c.isupper():
            upper.add(c.lower())
         if upper == lower:
            if j-i>cur_max:
               cur_max = j-i
               res = s[i:j+1]
   return res
s = "ZbybBbz"
print(solve(s))

入力

"ZbybBbz"

出力

bBb

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

    各文字がソートされた文字列sがあり、数値kもあるとすると、すべての文字が少なくともk回出現するように、最長の部分文字列の長さを見つける必要があります。 したがって、入力がs =aabccddeeffghij k =2の場合、出力は8になります。これは、ここでの最長の部分文字列が ccddeeffであり、すべての文字が少なくとも2回出現するためです。 これを解決するには、次の手順に従います- 関数rc()を定義します。これには時間がかかります c:=すべての文字とその出現を含むマップ acc:=新しいリスト ans:=0 有効:=真 lstのxごとに、 c [x]

  2. Pythonで最長の回文部分文字列

    文字列Sがあるとします。Sで最も長い回文部分文字列を見つける必要があります。文字列Sの長さは1000であると想定しています。したがって、文字列が「BABAC」の場合、その場合、最長の回文部分文字列は「BAB」です。 これを解決するために、次の手順に従います 文字列の長さと同じ次数の正方行列を1つ定義し、Falseで埋めます 主対角要素をtrueに設定して、0からorder –1までのすべてのiに対してDP[i、i] =True start:=0 範囲2からS+1の長さのlの場合 0からSの長さの範囲のiの場合– l + 1 end:=i + l l =2の場合、 S [i]