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

Pythonで指定された2つの文字列の一般的な特殊な部分文字列のサイズを見つけるプログラム


2つの文字列s1とs2があるとします。 s1とs2の両方の特別なサブストリングである最長のストリングs3のサイズを見つける必要があります。

yから0個以上の文字を削除してxを生成できる場合、文字列xは別の文字列yの特別な部分文字列であると言えます。

したがって、入力がs1='パイナップル's2='people'の場合、特別な部分文字列はサイズ5の' peple'であるため、出力は5になります。

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

  • prev:=新しい辞書。キーが存在しない場合は0を返します
  • 範囲0からs1-1のサイズのiの場合、do
    • cur:=新しい辞書。キーが存在しない場合は0を返します
    • 範囲0からs2-1のサイズのjの場合、do
      • cur [j]:=prev [j-1] + 1(s1[i]がs2[j]と同じ場合)それ以外の場合はcur[j-1]とprev[j]の最大値
    • prev:=cur
  • return prev [size of s2 -1]

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

from collections import defaultdict
def solve(s1, s2):
   prev = defaultdict(int)
   for i in range(len(s1)):
      cur = defaultdict(int)
      for j in range(len(s2)):
         cur[j] = prev[j - 1] + 1 if s1[i] == s2[j] else max(cur[j - 1], prev[j])
      prev = cur
   return prev[len(s2)-1]

s1 = 'pineapple'
s2 = 'people'
print(solve(s1, s2))

入力

'pineapple', 'people'

出力

5

  1. Pythonの特定のグラフで特別なタイプのサブグラフを見つけるプログラム

    頭と足という名前の2つのタイプの頂点を持つ特別なタイプのグラフがあるとします。グラフにはヘッドが1つだけあり、ヘッドを各足に接続するk個のエッジがあります。したがって、無向、無加重のグラフが与えられた場合、グラフの頂点が互いに素なサブグラフで、これらの特殊なタイプのグラフを見つける必要があります。共通の頂点がない場合、2つのグラフは頂点が互いに素であると言われます。 したがって、入力が次のような場合 ノード数(n)=5、フィート数(t)=2の場合、出力は5になります。 与えられたグラフの頂点が互いに素なサブグラフであるそのような特別なグラフが5つある可能性があります。 これを解決

  2. 2つの文字列から珍しい単語を見つけるPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 − 2つの文字列が与えられているので、与えられた文字列から珍しい単語を取得する必要があります。 次に、以下の実装のソリューションを見てみましょう- 例 # uncommon words def find(A, B):    # count    count = {}    # insert in A    for word in A.split():       count[word] = coun