📅  最后修改于: 2023-12-03 15:39:55.297000             🧑  作者: Mango
本文介绍了 UGC NET CS 2016 年 8 月 – III 考试中的问题 50,旨在帮助程序员更好地理解并掌握相关知识点。
给定一个字符串 S,其中 S[i] 是字母,数字或符号。编写一个程序来判断给定的字符串是否是回文,只考虑字母数字字符和忽略大小写。
示例 1:
输入: "A man, a plan, a canal: Panama" 输出: true
示例 2:
输入: "race a car" 输出: false
本题要求判断给定字符串是否是回文。回文字符串是指从左往右和从右往左读取都一样的字符串,这里只需要考虑字母数字字符,并忽略大小写。
为了判断给定字符串是否是回文,我们可以将其中的字母和数字字符提取出来,并转化为小写字母。然后使用双指针法逐个比较字符,如果其中存在不同的字符,则该字符串不是回文;如果全部相同,则该字符串是回文。
以下是该算法实现的示例代码片段:
def isPalindrome(s: str) -> bool:
filtered_s = filter(str.isalnum, s.lower()) # 过滤掉非字母数字字符并转为小写字母
left, right = 0, len(filtered_s)-1 # 双指针初始化
while left < right:
if filtered_s[left] != filtered_s[right]: # 发现不同字符,直接返回 False
return False
left, right = left+1, right-1 # 指针移动
return True # 比较结束,所有字符均相同,返回 True
该算法的时间复杂度为 $O(n)$,其中 $n$ 是字符串的长度。因为要过滤掉非字母数字字符,并转为小写字母,所以需要使用额外的空间存储过滤后的字符串,空间复杂度为 $O(n)$。
本文介绍了 UGC NET CS 2016 年 8 月 – III 考试中的问题 50,给出了判断回文字符串的算法实现,并附带了示例代码。希望读者能够通过本文更好地理解并掌握相关知识点。