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

Pythonで回文部分文字列の数をカウントするプログラム


文字列sがあるとすると、s内の回文部分文字列の数を見つける必要があります。

したがって、入力がs ="level"のような場合、パリンドロームのサブストリングは["l"、 "e"、 "v"、 "e"、 "l"、 "eve"であるため、出力は7になります。 、"レベル"]

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

  • 関数check_palindrome()を定義します。これには、文字列、左、右が必要です
  • ans:=0
  • 左>=0、右
  • s[左]がs[右]と同じ場合、
    • ans:=ans + 1
    • 左:=左-1
    • 右:=右+1
  • それ以外の場合、
    • 回答を返す
  • 回答を返す
  • メインの方法から、次の手順を実行します-
  • ans:=0
  • 0からsのサイズの範囲のchar_indexの場合、次のようにします
    • ans:=ans + check_palindrome(s、char_index-1、char_index + 1)
    • ans:=ans + check_palindrome(s、char_index、char_index + 1)
  • return(ans)+sのサイズ
  • 理解を深めるために、次の実装を見てみましょう-

    class Solution:
       def solve(self, s):
          def check_palindrome(string, left, right):
             ans = 0
             while left >= 0 and right < len(s):
                if s[left] == s[right]:
                   ans += 1
                   left -= 1
                   right += 1
                else:
                   return ans
             return ans
          ans = 0
          for char_index in range(len(s)):
             ans += check_palindrome(s, char_index - 1, char_index + 1)
             ans += check_palindrome(s, char_index, char_index + 1)
          return (ans) + len(s)
    ob = Solution()
    print(ob.solve("level"))

    入力

    "level"

    出力

    7

    1. Pythonで各ブラケットの深さの文字数をカウントするプログラム

      「X」、「(」、および「)」の3文字のみで構成される文字列sがあるとします。文字列にはバランスの取れた角かっこがあり、いくつかの「X」の間に入れ子になった角かっこが再帰的に存在する可能性があります。ブラケットの各深さで、最も浅い深さから最も深い深さまで、「X」の数を見つける必要があります。 したがって、入力がs =(XXX(X(XX))XX)のような場合、出力は[5、1、2]になります。 これを解決するには、次の手順に従います- 深さ:=-1 out:=新しいリスト sの各cについて、 cが(と同じ場合、 深さ:=深さ+ 1 それ以外の場合、cが )と同じ場合、 深度

    2. PythonでnノードのBSTの数をカウントするプログラム

      n個の異なるノードがあるとします。すべてが異なります。二分探索木を形成するためにそれらを配置できる方法の数を見つける必要があります。二分探索木で知っているように、左側のサブツリーは常に小さい値を保持し、右側のサブツリーは大きい値を保持します。 これを解決するために、カタラン数を見つけます。カタラン数C(n)は、n個の異なるキーを持つ二分探索木を表します。式は次のようになります $$ C(n)=\ frac {(2n)!} {(n + 1)!\ times n!} $$ したがって、入力がn =3の場合、出力は5になります。 これを解決するには、次の手順に従います- 関数ncr