一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第13天,点击查看活动详情
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
- 本题给出是字符串
s,包含字母和数字、符号字符。 - 对字符串中的字母忽略大小写。
- 字符串
s由 ASCII 字符组成
- 本题给出是字符串
二、思路分析:
我们拿到本题,要求验证字符串是回文串。什么是回文串字符串?
- 将字符串进行翻转仍然是原字符串
- 回文字符串的特点左右字符对称相等
在本题中,给出的字符串s是包含符号、字母和数字的,只考虑字母和数字字符。
因此,我们先明确一下ASCII码中,符号有几种? -- 13种
- 首先对字符串s中存在的符号进行替换成空格
- 将字符串s字母lower()转化为小写字母,再使用split()去掉空格转换成列表
- 将字符串列表s_list()使用join()转化成字符串s
以上对字符串中的符号进行处理完成后,接下来我们开始判断是否是回文字符串?
解答该题,最直接方式就是双指针。
- 定义两个指针,分别指向字符串s的首尾。
- 进行遍历字符串,分别判断s[start]与s[end]是否相等
- 如果 s[start] 与 s[end] 不相等时,则返回False
- 否则start+1,end-1。直到start大于end时,结束遍历并返回True。
根据以上思路,我们使用python代码实现如下:
class Solution(object):
def isPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
if len(s) == 0: return True
log = ",:'.?!@#%*&^(){}[]_-+/\;<>$|\"\`"
for l in log :
s = s.replace(l," ")
s_list = s.lower().split()
s = "".join(s_list)
start = 0
end = len(s) - 1
while start <= end:
if s[start] != s[end]:
return False
start = start+1
end = end-1
return True
三、总结:
本题考察是双指针的应用,以及对ASCII表中符号的了解。AC提交如下:
时间复杂度:O(|s|),其中|s|是字符串s的长度。 空间复杂度:O(1).
以上是本期内容,欢迎大佬们点赞评论,下期见~~