快手 回文字串(Python語言實現)

2021-09-26 14:11:09 字數 2514 閱讀 3500

最大回文子串是被研究得比較多的乙個經典問題。

最近月神想到了乙個變種,對於乙個字串,如果不要求子串連續,那麼乙個字串的最大回文子串的最大長度是多少呢。

每個測試用例輸入一行字串(由數字0-9,字母a-z、a-z構成),字條串長度大於0且不大於1000.
輸出該字串的最長回文子串的長度。(不要求輸出最長回文串,並且子串不要求連續)
輸入:adbca

輸出:3

說明:因為在本題中,不要求回文子串連續,故最長回文子串為aba(或ada、aca)

使用動態規劃的思想,dp[front][rear]表示字串s中位置front到位置rear的字串中的最長回文子串的長度,那麼存在兩種情況:

最後,dp[0][-1]就是這個字串的最長回文子串的長度。

values =

input()

.strip(

)vl =

len(values)

dp =[[

0for i in

range

(vl)

]for j in

range

(vl)

]for rear in

range(0

, vl)

: dp[rear]

[rear]=1

for front in

range

(rear-1,

-1,-

1):if values[front]

== values[rear]

: dp[front]

[rear]

= dp[front+1]

[rear-1]

+2else

: dp[front]

[rear]

=max

(dp[front]

[rear-1]

, dp[front+1]

[rear]

)print

(dp[0]

[-1]

)

def

longest_palindrome_substring

(s):

return ******(0,

len(s)-1

)def

******

(front, rear)

:if front == rear:

return

1if front > rear:

return

0if s[front]

== s[rear]

:return ******(front+

1, rear-1)

+2else

:return

max(******(front, rear-1)

, ******(front+

1, rear)

)if __name__ ==

'__main__'

: s =

input()

.strip(

)print

(longest_palindrome_substring(s)

)

提示「執行超時」,可採用以空間換時間,使用字典結構。

def

longest_palindrome_substring

(s):

dp =

def******

(front, rear)

:if front == rear:

return

1if front > rear:

return0if

(front, rear)

in dp:

return dp[

(front, rear)

]if s[front]

== s[rear]

: cur = ******(front+

1, rear-1)

+2else

: cur =

max(******(front, rear-1)

, ******(front+

1, rear)

) dp[

(front, rear)

]= cur

return cur

return ******(0,

len(s)-1

)if __name__ ==

'__main__'

: s =

input()

.strip(

)print

(longest_palindrome_substring(s)

)

(最近更新:2023年08月27日)

python 回文字串

題目內容 給定乙個字串,判斷它是否是回文字串 即類似於peep,12321這樣的對稱字串 如果是輸出true,不是則輸出false。判斷過程中假定只考慮字母和數字字元,而且忽略字母的大小寫和其它符號 如空格 標點符號等 輸入格式 共一行,為乙個字串。輸出格式 共一行,為true或false。輸入樣例...

python 回文字串 回文數字

所謂回文字串,就是乙個字串,從左到右讀和從右到左讀是完全一樣的。回文數字也是如此。python2 如下 def huiwen s s1 str s if s1 join reversed s1 return true else return false 執行結果 huiwen abccba true...

python驗證回文字串

給定乙個字串,驗證它是否是回文串,只考慮字母和數字字元,可以忽略字母的大小寫。說明 本題中,我們將空字串定義為有效的回文串。示例 1 輸入 a man,a plan,a canal panama 輸出 true 示例 2 輸入 race a car 輸出 false 首先將字串轉成小寫,之後提取出字...