📅  最后修改于: 2023-12-03 15:40:33.512000             🧑  作者: Mango
回文串是指正反读都是相同的字符串,比如"level","racecar"等。在编写程序时,常常需要判断一个字符串是否为回文串。下面我们介绍几种判断字符串是否为回文串的方法。
暴力求解法是最朴素的方法,即逐一比较字符串的首尾字符是否相等,比较到中间位置即可停止比较。这种方法的时间复杂度是O(n),空间复杂度是O(1)。
def isPalindrome(s: str) -> bool:
i, j = 0, len(s) - 1
while i < j:
if s[i] != s[j]:
return False
i += 1
j -= 1
return True
翻转法是将字符串翻转后,与原字符串比较是否相等。这种方法时间复杂度也是O(n),但需要额外的空间来存储翻转后的字符串。
def isPalindrome(s: str) -> bool:
# 将字符串中的非字母数字字符去除掉
s = ''.join(filter(str.isalnum, s)).lower()
return s == s[::-1]
双指针法是将字符串分为左右两个部分,左指针指向开头,右指针指向结尾,然后同时向中间移动直至相遇。这种方法时间复杂度也是O(n),空间复杂度是O(1)。
def isPalindrome(s: str) -> bool:
# 将字符串中的非字母数字字符去除掉
s = ''.join(filter(str.isalnum, s)).lower()
i, j = 0, len(s) - 1
while i < j:
if s[i] != s[j]:
return False
i += 1
j -= 1
return True
上述三种方法的时间和空间复杂度都比较优秀,读者可以根据自己的实际情况选择适合自己的方法来判断字符串是否为回文串。