題目:
如果在將所有大寫字符轉(zhuǎn)換為小寫字符宛裕、并移除所有非字母數(shù)字字符之后乘寒,短語正著讀和反著讀都一樣缆瓣。則可以認(rèn)為該短語是一個(gè) 回文串 畴蒲。
字母和數(shù)字都屬于字母數(shù)字字符诗鸭。
給你一個(gè)字符串 s染簇,如果它是 回文串 ,返回 true 强岸;否則锻弓,返回 false 。
示例 1:
輸入: s = "A man, a plan, a canal: Panama"
輸出:true
解釋:"amanaplanacanalpanama" 是回文串请唱。
示例 2:
輸入:s = "race a car"
輸出:false
解釋:"raceacar" 不是回文串弥咪。
示例 3:
輸入:s = " "
輸出:true
解釋:在移除非字母數(shù)字字符之后,s 是一個(gè)空字符串 "" 十绑。
由于空字符串正著反著讀都一樣聚至,所以是回文串。
提示:
1 <= s.length <= 2 * 105
s 僅由可打印的 ASCII 字符組成
參考答案1:
def isPalindrome(self, s: str) -> bool:
s=s.lower()
l=[]
for i in s:
if i.isalnum():
l.append(i)
return l==l[::-1]
參考答案2:
def isPalindrome(self, s: str) -> bool:
temp = []
for ss in s:
if ss.isalpha():
temp.append(ss.lower())
elif ss.isdigit():
temp.append(ss)
return (res := ''.join(temp)) == res[::-1]
本人的漂亮爛代碼:
def isPalindrome(self, s: str) -> bool:
i = 0
ss = ''
while i < len(s):
if 'a' <= s[i] <= 'z' or '0' <= s[i] <= '9':
ss += s[i]
elif 'A' <= s[i] <= 'Z':
ss += s[i].lower()
i += 1
if len(ss) in [0, 1]:
return True
else:
j = 0
length = len(ss)
while j < length//2:
if ss[j] == ss[length-1-j]:
j += 1
else:
return False
return True
反思:
1本橙、字符串常用函數(shù):upper(), lower(), isupper(), islower(), isalpha(), isdigit(), isalnum(), count(), join()等
2扳躬、ss[i]==ss[-i-1]
3、字符串逆序:ss[::-1]
回顧一下 Python 中常用處理字符串的相關(guān)函數(shù):
string.capitalize() 把字符串的第一個(gè)字符大寫
string.count(str, beg=0, end=len(string)) 返回 str 在 string 里面出現(xiàn)的次數(shù)甚亭,如果 beg 或者 end 指定則返回指定范圍內(nèi) str 出現(xiàn)的次數(shù)
string.endswith(obj, beg=0, end=len(string)) 檢查字符串是否以 obj 結(jié)束贷币,如果beg 或者 end 指定則檢查指定的范圍內(nèi)是否以 obj 結(jié)束,如果是亏狰,返回 True,否則返回 False.
string.find(str, beg=0, end=len(string)) 檢測(cè) str 是否包含在 string 中役纹,如果 beg 和 end 指定范圍,則檢查是否包含在指定范圍內(nèi)暇唾,如果是返回開始的索引值促脉,否則返回-1
string.index(str, beg=0, end=len(string)) 跟find()方法一樣,只不過如果str不在 string中會(huì)報(bào)一個(gè)異常.
string.isalnum() 如果 string 至少有一個(gè)字符并且所有字符都是字母或數(shù)字則返回 True,否則返回 False
string.isalpha() 如果 string 至少有一個(gè)字符并且所有字符都是字母則返回 True,否則返回 False
string.isdecimal() 如果 string 只包含十進(jìn)制數(shù)字則返回 True 否則返回 False.
string.isdigit() 如果 string 只包含數(shù)字則返回 True 否則返回 False.
string.islower() 如果 string 中包含至少一個(gè)區(qū)分大小寫的字符策州,并且所有這些(區(qū)分大小寫的)字符都是小寫瘸味,則返回 True,否則返回 False
string.isnumeric() 如果 string 中只包含數(shù)字字符够挂,則返回 True旁仿,否則返回 False
string.isspace() 如果 string 中只包含空格,則返回 True孽糖,否則返回 False.
string.istitle() 如果 string 是標(biāo)題化的(見 title())則返回 True枯冈,否則返回 False
string.isupper() 如果 string 中包含至少一個(gè)區(qū)分大小寫的字符,并且所有這些(區(qū)分大小寫的)字符都是大寫办悟,則返回 True尘奏,否則返回 False
string.join(seq) 以 string 作為分隔符,將 seq 中所有的元素(的字符串表示)合并為一個(gè)新的字符串
string.lower() 轉(zhuǎn)換 string 中所有大寫字符為小寫.
string.lstrip() 截掉 string 左邊的空格
max(str) 返回字符串 str 中最大的字母誉尖。
min(str) 返回字符串 str 中最小的字母罪既。
string.replace(str1, str2, num=string.count(str1)) 把 string 中的 str1 替換成 str2,如果 num 指定,則替換不超過 num 次.
string.split(str="", num=string.count(str)) 以 str 為分隔符切片 string,如果 num 有指定值琢感,則僅分隔 num+ 個(gè)子字符串
string.startswith(obj, beg=0,end=len(string)) 檢查字符串是否是以 obj 開頭丢间,是則返回 True,否則返回 False驹针。如果beg 和 end 指定值烘挫,則在指定范圍內(nèi)檢查.
string.strip([obj]) 在 string 上執(zhí)行 lstrip()和 rstrip()
string.swapcase() 翻轉(zhuǎn) string 中的大小寫
string.title() 返回"標(biāo)題化"的 string,就是說所有單詞都是以大寫開始,其余字母均為小寫(見 istitle())
string.translate(str, del="") 根據(jù) str 給出的表(包含 256 個(gè)字符)轉(zhuǎn)換 string 的字符,要過濾掉的字符放到 del 參數(shù)中
string.upper() 轉(zhuǎn)換 string 中的小寫字母為大寫