A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward. Alphanumeric characters include letters and numbers.
Given a string s, return true if it is a palindrome, or false otherwise.
class Solution(object):
def isPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
s = ''.join(e for e in s if e.isalnum()).lower()
return s==s[::-1]
class Solution(object):
def isPalindrome(self,s):
sgood ="".join(ch.lower() for ch in s if ch.isalnum())
return s== s[::-1]
这个解决方案的基本思路是首先将输入的字符串中所有的字母和数字提取出来,并将所有字符转换为小写。然后,利用 Python 的切片操作符 [::-1]
来生成字符串的逆序,然后比较原始的字符串和逆序的字符串是否相同。如果相同,则该字符串是回文。
这个解决方案的时间复杂度是 O(n),其中 n 是字符串的长度。这是因为我们需要遍历整个字符串一次来提取所有的字母和数字,并再次遍历整个字符串来比较原始的字符串和逆序的字符串。其空间复杂度也是 O(n),因为我们需要存储提取出来的字母和数字。
这一行的功能是处理输入的字符串。首先,它使用列表推导(list comprehension)生成一个只包含原始字符串中的字母和数字的列表(通过 e.isalnum()
检查)。然后,''.join()
函数将这个列表中的所有字符连接成一个新的字符串。最后,.lower()
函数将新字符串中的所有大写字母转换为小写。这样,我们就得到了一个只包含小写字母和数字的字符串,可以用来判断是否为回文。
sgood ="".join(ch.lower() for ch in s if ch.isalnum()) 解释这句代码
这段代码的作用是对输入的字符串 s
进行处理,生成一个新的字符串 sgood
,其中只包含 s
中的字母和数字,并且所有的大写字母都被转换为小写。下面是逐步解释:
for ch in s
:这是一个 for 循环,遍历字符串s
中的每一个字符ch
。if ch.isalnum()
:这是一个条件判断,只有当ch
是字母或数字时(isalnum()
函数的意思是 "is alphanumeric",即判断一个字符是否是字母或数字)才会执行后续的操作。ch.lower()
:这是一个操作,将大写字母转换为小写字母。对于非字母字符,lower()
函数不会有任何影响。"".join()
:这是一个函数,将所有经过前面处理的字符连接起来,生成一个新的字符串。这个函数会把括号内的每个元素(这里是字符)合并为一个字符串,元素之间没有任何分隔。
所以,这句代码的含义就是,对于字符串 s
中的每个字符,如果它是字母或数字,就将它转换为小写(如果它是大写字母的话),然后将所有这些字符连接起来,生成一个新的字符串 sgood
。
概念解释:
列表推导式:
列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表。
它的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是 0 个或多个 for 或者 if 语句。那个表达式可以是任意的,意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表,在这个以 if 和 for 语句为上下文的表达式运行完成之后产生。
列表推导式的执行顺序:各语句之间是嵌套关系,左边第二个语句是最外层,依次往右进一层,左边第一条语句是最后一层。
[x*y for x in range(1,5) if x > 2 for y in range(1,4) if y < 3]
他的执行顺序是:
for x in range(1,5) if x > 2 for y in range(1,4) if y < 3 x*y
列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表。 它的结构是在一个中括号里包含一个表达式,然后是一个 for
语句,然后是0个或多个 for
或者 if
语句。那个表达式可以是任意的,意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表,在这个以 if
和 for
语句为上下文的表达式运行完成之后产生。
规范
variable = [out_exp for out_exp in input_list if out_exp == 2]
这里是另外一个简明例子:
multiples = [i for i in range(30) if i % 3 is 0]
print(multiples)
# Output: [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
这将对快速生成列表非常有用。 有些人甚至更喜欢使用它而不是 filter
函数。 列表推导式在有些情况下超赞,特别是当你需要使用 for
循环来生成一个新列表。举个例子,你通常会这样做:
squared = []
for x in range(10):
squared.append(x**2)
你可以使用列表推导式来简化它,就像这样:
squared = [x**2 for x in range(10)]