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

Pythonを使用して文字列を分割するためのいくつかの良い方法を見つけるためのプログラム


文字列sがあるとします。ここで、sを2つの空でない文字列pとqに分割でき、その連結がsに等しく、pとqの個別の文字の数が等しい場合、分割は適切な分割であると言われます。 sで作成できる適切な分割の数を見つける必要があります。

したがって、入力がs ="xxzxyx"の場合、分割には複数の方法があるため、出力は2になりますが、( "xxz"、 "xyx")または( "xxzx"、 "yx")のように分割すると、それなら彼らは良いです。

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

  • 結果:=0

  • 左:=アイテムの頻度をカウントするための空のマル

  • 右:=sに存在する各キャラクターの頻度を数える

  • sの各cについて、実行します

    • left [c]:=left [c] + 1

    • right [c]:=right [c]-1

    • right [c]がゼロの場合、

      • 右を削除[c]

    • 左のサイズが右のサイズと同じ場合、

      • 結果:=結果+ 1

  • 結果を返す

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

from collections import Counter
def solve(s):
   result = 0
   left, right = Counter(), Counter(s)
   for c in s:
      left[c] += 1
      right[c] -= 1
      if not right[c]:
         del right[c]
      if len(left) == len(right):
         result += 1
   return result
s = "xxzxyx"
print(solve(s))

入力

"xxzxyx"

出力

2

  1. Pythonを使用して適切なリーフノードペアの数を見つけるプログラム

    二分木があるとします。および別の値の距離d。 2つの異なるリーフノードのペアは、これら2つのノード間の最短経路が距離dよりも小さいか、同じである場合に適切であると言われます。 したがって、入力が次のような場合 距離d=4の場合、パスの長さの距離が2であるため、ペアは(8,7)と(5,6)ですが、(7,5)または(8,6)または他のペアであるため、出力は2になります。パスの長さが5であり、d=4よりも大きいため適切ではありません これを解決するには、次の手順に従います- sol:=0 関数util()を定義します。これが定着します ルートがnullの場合、

  2. Pythonでメッセージをデコードできるいくつかの方法を見つけるためのプログラム

    a =1、b =2、...z =26のようなマッピングがあり、エンコードされたメッセージメッセージ文字列があるとすると、デコードできる方法の数を数える必要があります。 したがって、入力がmessage =222の場合、出力は3になります。これは、bbb、bv、vbの3つの方法でデコードできるためです。 これを解決するには、次の手順に従います- memo:=メッセージサイズ+1と同じサイズの0のリスト memo [0]:=1 memo [1]:=1(message [0]が「0」と同じでない場合)それ以外の場合は0 2からメッセージのサイズまでの範囲のiの場合、実