📅  最后修改于: 2023-12-03 15:10:20.202000             🧑  作者: Mango
设计一个算法,判断一个字符串是否为回文串。
回文串是指正序和倒序读都相同的字符串,例如 "racecar"。
通过遍历判断字符串的前半部分和后半部分是否相同,需要注意字符串长度为奇偶的情况。
def is_palindrome(s: str) -> bool:
n = len(s)
for i in range(n // 2):
if s[i] != s[n - i - 1]:
return False
return True
时间复杂度为 O(n),空间复杂度为 O(1)。
同样是通过判断字符串前半部分和后半部分是否相同,但是使用两个指针从前后同时遍历字符串。
def is_palindrome(s: str) -> bool:
i, j = 0, len(s) - 1
while i < j:
while i < j and not s[i].isalnum():
i += 1
while i < j and not s[j].isalnum():
j -= 1
if s[i].lower() != s[j].lower():
return False
i += 1
j -= 1
return True
时间复杂度为 O(n),空间复杂度为 O(1)。
使用 Python 自带的库函数 re.sub()
和 str.lower()
转换大小写和替换特殊字符。
import re
def is_palindrome(s: str) -> bool:
s = re.sub('[^0-9a-zA-Z]', '', s).lower()
return s == s[::-1]
时间复杂度为 O(n),空间复杂度为 O(n)。
以上三种方法都可以判断字符串是否为回文串,根据实际情况选择不同的方法。其中直接遍历判断方法最简单,使用库函数判断方法最简洁。