給定乙個字串,驗證它是否是回文串,只考慮字母和數字字元,可以忽略字母的大小寫。首先將字串轉成小寫,之後提取出字串中的數字和字母。比較前半段和後半段內容是否相等。說明:本題中,我們將空字串定義為有效的回文串。
示例 1:
輸入: 「a man, a plan, a canal: panama」 輸出: true 示例 2:
輸入: 「race a car」 輸出: false
# -*- coding: utf-8 -*-
'''題目簡述:
給定乙個字串,驗證其是否是回文串。僅考慮字母和數字。
基本思路:
首先將字串中中所有元素轉成小寫,然後提取出數字和字母。
在結合python切片比較前後兩半段是否相等。
'''class
solution()
:def
isstring
(self,s):if
len(s)
<2:
return
true
s = s.lower(
)# 轉成小寫
slist =
for word in s:
if word.isalnum():
# 若是小寫or字母
mid =
len(slist)//2
if slist[
:mid]
== slist[::
-1][
:mid]
:return
true
return
false
if __name__ ==
'__main__'
: s =
'aba'
solu = solution(
) res = solu.isstring(s)
print
('結果為\n'
,res)
建立前後兩個指標,比較兩個指標對應的元素是否相等。直至比較兩個指標相遇。
# -*- coding: utf-8 -*-
'''題目簡述:
給定乙個字串,驗證其是否是回文串。僅考慮字母和數字。
基本思路:
設定兩個指標,比較元素是否相等,直至兩個指標碰頭。
'''class
solution()
:def
isstring
(self,s):if
len(s)
<2:
return
true
s = s.lower(
)
left =
0 right =
len(s)-1
# 開始比較
while left < right:
ifnot s[left]
.isalnum():
# 若不是字母或數字
left+=
1continue
ifnot s[right]
.isalnum():
right-=
1continue
if s[left]
.isalnum(
)and s[right]
.isalnum():
if s[left]
!= s[right]
:return
false
else
: left+=
1 right-=
1return
true
if __name__ ==
'__main__'
: s =
"a man, a plan, a canal: panama"
solu = solution(
) res = solu.isstring(s)
print
('結果為\n'
,res)
a. 方法一中 : 驗證乙個字元是否是 數字or字母: 呼叫現成api。word.isalnum(); 另外,比較前後兩半段是否相等。主要是後半段的處理很巧妙。先將字串倒序然後比較前mid個元素。這樣保證了前後兩半段待比較元素數量相同。而不會因為字串中字母的奇數偶數數量而出差。
b. 不論法一還是法二: 均存在乙個細節。即s = s.lower(),僅僅在程式中s.lower()並不會改變原始字串。實質上開闢了一塊新記憶體。因此,必須賦值給s。否則不起作用。
680 驗證回文字串 (Python)
給定乙個非空字串 s,最多刪除乙個字元。判斷是否能成為回文字串。示例 1 輸入 aba 輸出 true 示例 2 輸入 abca 輸出 true 解釋 你可以刪除c字元。思路 首先兩個指標,l,r分別是從前開始和從後開始。如果s l s r 的時候,我們需要刪除掉乙個字元,就有兩種情況。一種是刪除左...
leetcode 驗證回文字串 python3
方案一 一般方法 分奇數偶數來說,方法比較一般 import string 給join傳遞入參時計算符合條件的字元,去掉標點符號 b join c for c in s if c not in string.punctuation 把空格去掉 b b.replace 小寫b b.lower l le...
驗證回文字串
描述 給定乙個字串,驗證它是否是回文串,只考慮字母和數字字元,可以忽略字母的大小寫。說明 本題中,我們將空字串定義為有效的回文串。解法 字串中可能含有其他的字元,我們從字串的兩頭開始索引,如果左邊的字元不是字母或者數字字元,那麼讓左邊先走一步,同理右邊的也一樣。如果兩邊字元相同,那麼左邊和右邊同時走...