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

まだ削除できるサブシーケンスの長さを見つけるプログラムtはPythonのsのサブシーケンスです


文字列sと別の文字列tがあるとします。そして、tはsのサブシーケンスです。 tがsのサブシーケンスであるように、sから削除できるサブストリングの最大長を見つける必要があります。

したがって、入力がs ="xyzxyxz" t ="yz"の場合、サブストリング "abca"

を削除できるため、出力は4になります。

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

  • 左:=新しいリスト、右:=また新しいリスト

  • c1:=-1、c2:=-1、c3:=-1

  • j:=0

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

    • s[i]がt[j]と同じ場合、

      • 左端にiを挿入

      • j:=j + 1

    • jがtのサイズと同じである場合、

      • c1:=sのサイズ--i-1

      • ループから出てきます

  • j:=tのサイズ-1

  • s-1から0の範囲サイズのiの場合、1ずつ減らします。

    • s[i]がt[j]と同じ場合、

      • 位置0の右側にiを挿入します

      • j:=j-1

    • jが-1と同じ場合、

      • c2:=i

      • ループから出てきます

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

    • c3:=最大c3および(right [i + 1] --left [i] -1)

  • c1、c2、c3の最大値を返す

例(Python)

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

class Solution:
   def solve(self, s, t):
      left = []
      right = []
      c1 = -1
      c2 = -1
      c3 = -1
      j = 0
      for i in range(len(s)):
         if s[i] == t[j]:
            left.append(i)
            j += 1
         if j == len(t):
            c1 = len(s) - i - 1
            break
      j = len(t) - 1
      for i in range(len(s) - 1, -1, -1):
         if s[i] == t[j]:
            right.insert(0, i)
            j -= 1
         if j == -1:
            c2 = i
            break
      for i in range(len(t) - 1):
         c3 = max(c3, right[i + 1] - left[i] - 1)
      return max(c1, c2, c3)
ob = Solution()
s = "xyzxyxz"
t = "yz"
print(ob.solve(s, t))

入力

"xyzxyxz", "yz"

出力

4

  1. Pythonで最も長いバランスの取れたサブシーケンスの長さを見つけるプログラム

    括弧「(」および「)」を含む文字列sがあるとすると、バランスの取れた括弧の最長のサブシーケンスの長さを見つける必要があります。 したがって、入力がs =())(()(の場合、出力は4になります。これは、 ()()のようなサブシーケンスを取ることができるためです。 これを解決するには、次の手順に従います- res:=0 n:=sのサイズ close:=0 n-1から0の範囲のiの場合、1ずつ減らします。 s[i]が)と同じ場合、 close:=close + 1 それ以外の場合 0の場合、 close:=close-1 r

  2. Pythonで指定された文字を使用して作成できる最長の長さを見つけるプログラム

    単語と呼ばれる文字列と文字と呼ばれる別の文字列のリストがあるとすると、文字の文字から形成できる単語の最長の文字列の長さを見つける必要があります。単語を形成できない場合は、0を返します。ここでは文字を再利用できません。 したがって、入力がwords =[dog、 cat、 rat、 bunny、 lion、 bat]、letters =gabctnyuの場合、出力は3になります。 「猫」または「バット」という単語を作成できるため、最大長は3です。 これを解決するには、次の手順に従います- ref:=文字とその頻度を含む地図 max:=0 単語内の各単語について、 w:=単語の文字と