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

Pythonで個別のサブシーケンスの数を見つけるプログラム


文字列sがあるとすると、文字列sの個別のサブシーケンスの数をカウントする必要があります。答えが大きすぎる場合は、10 ^ 9+7を法とする結果を返します。

したがって、入力がs ="bab"の場合、6つの異なるシーケンスがあり、これらは "a"、 "b、" ba "、" ab "、" bb "、" abb "であるため、出力は6になります。 。

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

  • dp:=サイズがsと同じで、0で埋められた配列

  • m:=10 ^ 9 + 7

  • 各インデックスiとsのアイテム文字について、実行します

    • ind:=右からsのi番目の文字のインデックス

    • dp [i]:=1 +(dp [インデックス0からi-1まで]のすべての要素の合計)indが-1と同じ場合はmod mそれ以外の場合(インデックスindからi-1までのdp[のすべての要素の合計] ])mod m

  • dpmodmのすべての要素の合計を返す

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

def solve(s):
   dp, m = [0] * len(s), 10**9 + 7
   for i, char in enumerate(s):
      ind = s.rfind(char, 0, i)
      dp[i] = 1 + sum(dp[:i]) % m if ind == -1 else sum(dp[ind:i]) % m
   return sum(dp) % m

s = "bab"
print(solve(s))

入力

"abcd", "abcdbcd"

出力

6

  1. Pythonで範囲内のノード数を見つけるプログラム

    BSTがあり、左と右の境界lとrもあるとすると、lとrの間に値が存在するルート内のすべてのノードの数を見つける必要があります。 したがって、入力が次のような場合 l =7、r =13の場合、8、10、12の3つのノードがあるため、出力は3になります。 これを解決するために、次の手順に従います- スタック:=スタックと最初にルートを挿入し、カウント:=0 スタックが空でないときに、実行します node:=スタックの最上位要素、およびポップ要素 ノードがnullでない場合、 l<=ノードのデータ<=rの場合、 count:=count + 1

  2. リスト内で最大数を見つけるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 与えられたリスト入力では、与えられたリストの中で最大の数を見つける必要があります。 ここでは、2つのアプローチについて説明します 並べ替え手法の使用 組み込みのmax()関数を使用する アプローチ1-組み込みのsort()関数を使用する 例 list1 = [18, 65, 78, 89, 90] list1.sort() # main print("Largest element is:", list1[-1]) 出力 Largest element is: