一. 題目
題目給定乙個字串,驗證它是否是回文串,只考慮字母和數字字元,可以忽略字母的大小寫。
說明:本題中,我們將空字串定義為有效的回文串。
示例
二. 方法一
解題思路
先去掉原字串中兩端的空格以及將其中的小寫字母轉成大寫字母
建立兩個指標, 分別指向整理後字串的頭尾
如果頭指標小於尾指標, 且頭指標所指元素不是字母或數字, 則索引 + 1
如果頭指標小於尾指標, 且尾指標所指元素不是字母或數字, 則索引 - 1
如果頭尾指標指向的元素都是數字或字母, 則比較元素是否相等
如果相等, 則繼續比較, 直到比較到頭指標不小於尾指標
如果不相等, 則直接返回false
最終返回true
解題**
def
ispalindrome
(self, s:
str)
->
bool
:# 先去掉原字串中兩端的空格以及將其中的小寫字母轉成大寫字母
s = s.strip(
).upper(
)# 建立兩個指標, 分別指向整理後字串的頭尾
left =
0 right =
len(s)-1
while right > left:
# 如果頭指標小於尾指標, 且當前元素不是字母或數字, 則跳過
while
not s[left]
.isalnum(
)and left < right:
left +=
1while
not s[right]
.isalnum(
)and left < right:
right -=
1# 此時頭尾元素均是字母或者數字
# 如果相等, 則繼續比較下一對元素; 如果不相等,則直接返回false
if s[left]
== s[right]
: left +=
1 right -=
1else
:return
false
# 如果執行到最後, 則返回true
else
:return
true
分析
時間複雜度: o(n)
空間複雜度: o(1)
LeetCode 驗證IP位址
ipv4 位址由十進位制數和點來表示,每個位址包含4個十進位制數,其範圍為 0 255,用 分割。比如,172.16.254.1 同時,ipv4 位址內的數不會以 0 開頭。比如,位址 172.16.254.01 是不合法的。ipv6 位址由8組16進製制的數字來表示,每組表示 16 位元。這些組數...
LeetCode 驗證回文串
題目描述 給定乙個字串,驗證它是否是回文串,只考慮字母和數字字元,可以忽略字母的大小寫。說明 本題中,我們將空字串定義為有效的回文串。示例 1 輸入 a man,a plan,a canal panama 輸出 true 示例 2 輸入 race a car 輸出 false class solut...
LeetCode 驗證回文字串
給定乙個非空字串s,最多刪除乙個字元。判斷是否能成為回文字串。示例 1 輸入 aba 輸出 true 示例 2 輸入 abca 輸出 true 解釋 你可以刪除c字元。注意 字串只包含從 a z 的小寫字母。字串的最大長度是50000。思路 雙指標 當不相等的時候 左指標跳過乙個或者右指標跳過乙個 ...