Pythonで最長の回文部分文字列
これを解決するために、次の手順に従います
- 文字列の長さと同じ次数の正方行列を1つ定義し、Falseで埋めます
- 主対角要素をtrueに設定して、0からorder –1までのすべてのiに対してDP[i、i] =True
- start:=0
- 範囲2からS+1の長さのlの場合
- 0からSの長さの範囲のiの場合– l + 1
- end:=i + l
- l =2の場合、
- S [i] =S [end-1]の場合、
- DP [i、end --1] =True、max_len:=l、およびstart:=i
- S [i] =S [end-1]の場合、
- それ以外の場合
- S [i] =S[end-1]およびDP[i+ 1、end-2]の場合、
- DP [i、end --1] =True、max_len:=l、およびstart:=i
- S [i] =S[end-1]およびDP[i+ 1、end-2]の場合、
- 0からSの長さの範囲のiの場合– l + 1
- インデックスの開始から開始までの部分文字列を返す+max_len
理解を深めるために、次の実装を見てみましょう-
class Solution(object): def longestPalindrome(self, s): dp = [[False for i in range(len(s))] for i in range(len(s))] for i in range(len(s)): dp[i][i] = True max_length = 1 start = 0 for l in range(2,len(s)+1): for i in range(len(s)-l+1): end = i+l if l==2: if s[i] == s[end-1]: dp[i][end-1]=True max_length = l start = i else: if s[i] == s[end-1] and dp[i+1][end-2]: dp[i][end-1]=True max_length = l start = i return s[start:start+max_length] ob1 = Solution() print(ob1.longestPalindrome("ABBABBC"))
入力
"ABBABBC"
出力
"BBABB"
-
Pythonで文字を繰り返さない最長の部分文字列
文字列があるとします。文字を繰り返さずに最長の部分文字列を見つける必要があります。したがって、文字列が「ABCABCBB」のような場合、長さ3の繰り返しの部分文字列があるため、結果は3になります。これが「ABC」です。 これを解決するために、次の手順に従います set i:=0、j:=0、情報を保存するために1つのマップを設定します ans:=0 whilej<文字列の長さs map [s [j]]の場合、 ans:=max(ans、j – i + 1) map [s [j]]:=j それ以外の場合 i:=map [s [j]] + 1 ans:=max(ans、
-
最長の共通部分文字列に対するPythonのSequenceMatcher。
2つの文字列が与えられた場合、私たちのタスクは最も長い共通のサブ文字列を出力することです。 SequenceMatcher.find_longest_match()メソッドを使用してPythonの問題を解決します。 クラスdifflib.SequenceMatcherは、シーケンス要素がハッシュ可能である限り、任意のタイプのシーケンスのペアを比較するための柔軟なクラスです。 find_longest_match(a、x、b、y) a [a:x]とb [b:y]で最も長く一致するブロックを見つけます。 例 Input: str1 = pythonprogramming,