【LeetCode】125. 验证回文串

422 阅读2分钟

image.png

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第13天,点击查看活动详情

测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。

怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~

一、题目描述:

  • 题目内容

image.png

  • 题目示例

image.png

  • 题目解析

    • 本题给出是字符串s,包含字母和数字、符号字符。
    • 对字符串中的字母忽略大小写。
    • 字符串s 由 ASCII 字符组成

二、思路分析:

我们拿到本题,要求验证字符串是回文串。什么是回文串字符串?

  • 将字符串进行翻转仍然是原字符串
  • 回文字符串的特点左右字符对称相等

image.png

在本题中,给出的字符串s是包含符号、字母和数字的,只考虑字母和数字字符。

因此,我们先明确一下ASCII码中,符号有几种? -- 13种

image.png

  • 首先对字符串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提交如下:

image.png

时间复杂度:O(|s|),其中|s|是字符串s的长度。 空间复杂度:O(1).

以上是本期内容,欢迎大佬们点赞评论,下期见~~