51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

实现一个函数,判断一个字符串是否是回文,并分析时间复杂度和空间复杂度。请说明如何优化该算法(如果可能)。

Tencent软件开发-前端开发方向难度:中等

答案

1) 【一句话结论】
可以用双指针法在原字符串上判断回文,通过过滤非字母数字字符并统一大小写,时间复杂度O(n),空间复杂度O(1),覆盖空字符串和单字符边界,是前端场景下高效且优化的方案。

2) 【原理/概念讲解】
首先明确回文定义:正读反读都相同的字符串(如“racecar”)。双指针法核心是从字符串两端向中间移动指针,逐个字符比较有效字符。具体步骤:

  • 初始化左指针left(从首字符开始)、右指针right(从尾字符开始);
  • 移动left直到遇到字母/数字(过滤空格、标点),移动right直到遇到字母/数字;
  • 比较当前left和right位置的字符(忽略大小写,如'a'和'A'视为相同);
  • 若所有有效字符对称,则字符串是回文。
    类比:就像用两个手指从两端向中间夹,每一步检查对应位置的字符是否相同,若全程一致,就是回文。
    边界条件:空字符串和单字符本身是回文,因为正反读无差异,无需额外遍历。

3) 【对比与适用场景】

方法定义特性使用场景注意点
双指针原位处理从两端向中间比较有效字符,原位过滤非字母数字时间O(n),空间O(1)前端性能敏感场景(如实时判断)需处理空格、大小写、非字母数字
反转字符串比较新建字符串反转后与原字符串比较时间O(n),空间O(n)(额外字符串)简单实现,字符串较短时空间开销大
递归递归比较首尾字符时间O(n),空间O(n)(递归栈)理论展示栈溢出风险高(长字符串不适用)

4) 【示例】
输入字符串:"!A man, a plan, a canal: Panama"
处理过程:

  • 过滤非字母数字字符后为 "AmanaplanacanalPanama"
  • 双指针比较:左指针从首字符'A'开始,右指针从尾字符'a'开始,逐个字符比较(忽略大小写),全程对称,返回True。
    伪代码(Python风格):
def is_palindrome(s: str) -> bool:
    left, right = 0, len(s) - 1
    while left < right:
        # 移动left到下一个有效字符
        while left < right and not s[left].isalnum():
            left += 1
        # 移动right到上一个有效字符
        while left < right and not s[right].isalnum():
            right -= 1
        # 比较字符(忽略大小写)
        if s[left].lower() != s[right].lower():
            return False
        left += 1
        right -= 1
    return True

5) 【面试口播版答案】
“首先,判断回文的核心是检查字符串正反是否相同。这里用双指针法,一个从左端,一个从右端,逐步向中间移动,比较对应位置的字符。为了准确判断,需要忽略空格、标点,并统一大小写。比如字符串‘Race a car’,处理后为‘raceacar’,每个有效字符对称,所以是回文。时间复杂度O(n),空间O(1),通过原位过滤和比较,避免额外空间,适合前端场景。”

6) 【追问清单】

  • 问:如何处理空字符串或单字符?
    答:空字符串和单字符本身是回文,因为正反读都相同,无需额外遍历。
  • 问:时间复杂度是否可以优化?
    答:双指针法已经是O(n),因为每个字符最多遍历一次,无法进一步优化时间复杂度。
  • 问:递归实现是否可行?
    答:递归可以,但栈深度为n,长字符串会导致栈溢出,空间复杂度O(n),不如双指针高效。
  • 问:字符串包含中文时如何处理?
    答:统一编码(如UTF-8),过滤非中文字符,按字符编码比较。

7) 【常见坑/雷区】

  • 忽略空字符串或单字符的回文判断,导致概念完整性不足;
  • 空间复杂度计算错误(如用StringBuilder构建新字符串,导致空间O(n));
  • 递归实现导致栈溢出(长字符串不适用);
  • 未过滤非字母数字字符(如“!A man, a plan, a canal: Panama”误判为非回文);
  • 比较时未统一大小写(如“Racecar”误判为非回文)。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1