Pythonでの最長のチャンク回文分解
テキストがあるとします。次のようなa[1]、a [2]、...、a[k]が存在するような最大のkを見つける必要があります。各a[i]は空でない文字列です。それらの連結a[1]+ a [2] + ... + a [k]は、指定されたテキストと同じです。 1からkの範囲のすべてのiについて、a [i] =a [{k+1--i}]。
したがって、入力が「antaprezatepzapreanta」の場合、出力は11になります。これは、「(a)(nt)(a)(pre)(za)(tpe)(za)(pre)(」のように分割できるためです。 a)(nt)(a)"。
これを解決するには、次の手順に従います-
-
start:=0、end:=テキストの長さ-1
-
空の文字列でtemp1とtemp2を初期化します
-
テキストの長さが奇数の場合はans=1、それ以外の場合は0
-
開始<終了、実行-
-
temp1:=temp1 + text [start]
-
temp2:=text [end] + temp2
-
temp1がtemp2と同じ場合、-
-
temp1とtemp2を空の文字列として設定します
-
ans:=ans + 2
-
-
start:=start + 1
-
end:=end-1
-
-
テキストの長さが偶数で(temp1またはtemp2が空でない場合)
-
ans:=ans + 1
-
-
ansを返す
理解を深めるために、次の実装を見てみましょう-
例
class Solution(object): def longestDecomposition(self, text): start = 0 end = len(text)-1 temp1 = "" temp2 = "" ans = 1 if len(text) & 1 else 0 while start<end: temp1+=text[start] temp2 = text[end]+temp2 if temp1 == temp2: temp1 = temp2 = "" ans+=2 start+=1 end-=1 if len(text)%2 == 0 and(temp1 or temp2): ans += 1 return ans ob = Solution() print(ob.longestDecomposition("antaprezatepzapreanta"))
入力
"antaprezatepzapreanta"
出力
11
-
Pythonで最も長い共通プレフィックス
配列に文字列のセットがあるとします。配列内の文字列の中から最長の共通プレフィックスを見つける必要があります。ここでは、すべての文字列が小文字の文字列であると想定します。また、共通のプレフィックスがない場合は、「」を返します。 したがって、文字列の配列が[school、 schedule、 Scotland]のような場合、これらすべての文字列に存在するため、最長の共通プレフィックスは「sc」です。 これを解決するために、最初の文字列をcurrとして取得し、配列から各文字列を取得して文字ごとに読み取り、currと取得した文字列の間の文字を1つずつ確認します。それらが同じである場合は次の文字に進
-
Pythonの回文数
整数があるとします。整数が回文であるかどうかを確認する必要があります。つまり、整数は順方向または逆方向の両方で同じであり、その数は回文です。たとえば、番号が454であるとすると、逆にすると再び454になります。これが回文です。ここで、数値が-565の場合、その逆は565-になります。これは同じではないため、これは回文ではありません。 これを解決するために、数値を文字列として変換してから、文字列を逆にします。文字列と逆文字列が同じ場合、番号は回文です。したがって、その場合はtrueを返し、それ以外の場合はfalseを返します。 理解を深めるために実装を見てみましょう 例 class Solu