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

Pythonで角かっこで囲まれた部分文字列を逆にするプログラム


文字と括弧「(」と「)」を含む小文字の文字列sがあるとします。括弧で囲まれたすべての文字列を再帰的に反転し、結果の文字列を返す必要があります。

したがって、入力がs ="back(aps)ce"のような場合、出力は「バックスペース」になります。

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

  • 関数trav()を定義します。これには、s、dir、start、close:=close、ans:=ans

    が必要です。
    • end:="(" dirが-1と同じ場合、それ以外の場合は ")"

    • other:="("終了が ")"と同じ場合、それ以外の場合 ")"

    • start

      • s [start]が他と同じ場合、

        • trav(s、-dir、close [other、start] --dir)

        • start:=close [other、start] + dir

      • それ以外の場合

        • ansの最後にs[start]を挿入します

        • start:=start + dir

  • 主な機能から、次のようにします-

  • ans:=新しいリスト

  • close:=キー「)」と「(」を含む新しいマップ最初の値は2つの空のマップです

  • スタック:=新しいリスト

  • sの各インデックスIと値cについて、実行します

    • cが"("と同じ場合、

      • iをスタックにプッシュ

    • それ以外の場合、cが ")"と同じ場合、

      • o:=スタックの一番上、次にスタックからポップ

      • close [")"、i]:=o

      • close ["("、o]:=i

  • trav(s、1、0)

  • 空白の文字列で結合されたansを返す

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

class Solution:
   def solve(self, s):
      ans = []
      close = {")": {}, "(": {}}
      stack = []
      for i, c in enumerate(s):
         if c == "(":
            stack.append(i)
         elif c == ")":
            o = stack.pop()
            close[")"][i] = o
            close["("][o] = i
      def trav(s, dir, start, close=close, ans=ans):
         end = "(" if dir == -1 else ")"
         other = "(" if end == ")" else ")"
         while start < len(s) and s[start] != end:
            if s[start] == other:
               trav(s, −dir, close[other][start] − dir)
               start = close[other][start] + dir
            else:
               ans.append(s[start])
               start += dir
      trav(s, 1, 0)
      return "".join(ans)
ob = Solution()
print(ob.solve("back(aps)ce"))

入力

"back(aps)ce"

出力

backspace

  1. Pythonで有向グラフを反転するプログラム

    有向グラフがあるとすると、その逆を見つける必要があるため、エッジがuからvに移動すると、vからuに移動します。ここで入力は隣接リストになり、ノードがn個ある場合、ノードは(0、1、...、n-1)になります。 したがって、入力が次のような場合 その場合、出力は次のようになります これを解決するには、次の手順に従います- ans:=n個の異なるリストのリスト。nは頂点の数です 各インデックスi、およびグラフ内の隣接リストlについて、実行します lのxごとに、 ans [x]の最後にiを挿入します 回答を返す 理解を深めるために、次の実装を見てみましょう- 例

  2. アナグラム部分文字列検索用のPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −テキストとパターンが与えられた場合、パターンのすべての出現とその順列(またはアナグラム)をテキストで印刷する必要があります。 次に、以下の実装のソリューションを見てみましょう- 例 # maximum value MAX = 300 # compare def compare(arr1, arr2):    for i in range(MAX):       if arr1[i] != arr2[i]:       &nbs