(pythontip平台)題目 回文子串

2021-09-26 01:23:06 字數 1347 閱讀 6804

題目要求: 給你乙個字串a和乙個正整數n,判斷a中是否存在長度為n的回文子串。如果存在,則輸出yes,否則輸出no。

回文串的定義:記串str逆序之後的字串是str1,若str=str1,則稱str是回文串,如"abcba".

思路:回文數好判斷,利用python的強大的切片功能,將逆序的字串和原字串比較即可。但現在問題是如何判斷給定的字串裡,有給定長度的字串。我的想法是利用巢狀迴圈,原字串每移動一次,其逆序的字串從頭到尾遍歷一次,當發現這兩個字串某個元素相等的時候,就要開始往後多讀n-1個字串,如果有就標記一下,然後繼續迴圈。設定乙個初始值為false的flag,最後看這個值是true或者false,來列印yes 或者 no.這裡注意列表不能越界,最大為len(a)-n

因此**如下

b=a[::

-1]# a 的逆序數

flag =

false

# 標誌值,來判斷列印內容

for i in

range(0

,len

(a)-n+1)

:for k in

range(0

,len

(a)-n+1)

:if a[i:i+n]

==b[k:k+n]

: flag =

true

else

:continue

if flag:

print

("yes"

)else

:print

("no"

)

其他方法:原來的方法中用到了巢狀迴圈,這個方法複雜度優點有點高?有麼有什麼在簡單點的方法呢?

有,上面的方法中,我是另外建立了乙個字串b,b為a的逆序。然後比較a和b,其實我不必建立的,按照題意,直接判斷a中是否存在回文數即可。為此,我可以定義乙個判斷回文數的函式is_palindrome():

def

is_palindrome

(a):

return

(true

if a == a[::

-1]else

false

)for index in

range

(len

(a)-n+1)

:if is_palindrome(a[index:index+n]):

print

('yes'

)break

else

:print

('no'

)

刷題 Python Tip 題目6 10

題目6 輸出100以內的所有素數,素數之間以乙個空格區分 from math import sqrt print join str key for key in x for x in xrange 2,100 if 0 not in x d for d in xrange 2,int sqrt x ...

刷題 Python Tip 題目1 5

題目1 just print a b give you two var a and b,print the value of a b,just do it print a b 題目2 list排序 給你乙個list l,如l 2,8,3,50 對l進行公升序並輸出 a sorted l print ...

回文數題目

1 回文字串 string problem 194 time limit 1000ms memory limit 65536k description 對於給定的乙個字串,判斷它是否是回文字串,例如 songnos是回文字串,songgnos也是回文字串。input 輸入資料有多行,第一行是乙個整數...