LeetCode 125 _ 字符串
1. 题目描述
https://leetcode-cn.com/problems/valid-palindrome/
2. 代码
1 class Solution: 2 def isPalindrome(self, s: str) -> bool: 3 S = list()#定义一个列表,模拟栈 4 Q = list()#定义一个离诶包,模拟队列 5 if len(s) == 0:#空字符串,被当作是回文字符串 6 return True 7 s = s.lower()#将原字符串转化为小写 8 for c in s:#如果当前字符是小写字母(a~z)或者数字(0~9) 9 if (ord(c) >= 97 and ord(c) <= 122) or (ord(c) >= 48 and ord(c) <= 57): 10 S.append(c)#添加到栈中 11 Q.append(c)#添加到队列中 12 while len(S) > 0: 13 ss = S.pop(-1)#栈取栈顶元素(尾部) 14 qq = Q.pop(0)#队列取队头元素(首部) 15 if ss != qq:#如果字符不相同,则表示不是回文 16 return False 17 return True#如果所有字符都比对完毕,没有发现不相同的字符,则是回文
3. 语法整理
3.1 lower()方法, 转换字符串中所有大写字符为小写.
str.lower()
3.2 ord(), 以一个字符(长度为1的字符串)作为参数, 返回对应的 ASCII 数值, 或者 Unicode 数值.
ord(c)
返回值为对应的十进制整数. 如:
>>>ord('a') 97 >>> ord('b') 98 >>> ord('c') 99
3.3 26个字母大小写的ASCII码值:
小写:
a → 97, b → 98, c → 99, d → 100, e → 101, f → 102,
g → 103, h → 104, i → 105, j → 106, k → 107, l → 108,
m → 109,n → 110, o → 111, p→ 112, q → 113, r → 114,
s → 115, t → 116, u → 117,v → 118, w → 119, x → 120, y → 121, z → 122
大写:
A → 65,B → 66,C → 67, D → 68, E → 69,
F → 70,G → 71,H → 72, I → 73, J → 74,
K → 75,L → 76, M → 77, N → 78, O → 79,
P → 80,Q → 81,R → 82, S → 83, T → 84,
U → 85,V → 86,W → 87, X → 88, Y → 89,Z → 90
数字:
0 → 48,1 → 49,2 → 50, 3 → 51, 4 → 52,
5 → 53,6→ 54, 7 → 55, 8 → 56, 9 → 57
3.4 pop(), 用于移除列表中的一个元素(默认最后一个元素), 并且返回该元素的值.
1 list.pop([index=-1])
1 list1 = ['Google', 'Runoob', 'Taobao'] 2 list_pop=list1.pop(1) 3 print ("删除的项为 :", list_pop) 4 print ("列表现在为 : ", list1)
输出为:
1 删除的项为 : Runoob 2 列表现在为 : ['Google', 'Taobao']
3.5 栈和队列
栈: 先进后出
队列: 先进先出