題目要求: 給你乙個字串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 輸入資料有多行,第一行是乙個整數...