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

实现一个函数,判断一个字符串是否是回文(即正读和反读都一样),要求考虑空字符串和大小写不敏感的情况(例如 'Aba' 是回文,'Abc' 不是)。请说明时间复杂度和空间复杂度,并分析在移动端场景下的应用(如验证码输入检查)。

Tencent软件开发-移动客户端开发方向难度:简单

答案

1) 【一句话结论】采用双指针法,时间复杂度O(n),空间复杂度O(1),适用于移动端验证码等场景,能高效判断字符串是否为回文,同时处理大小写不敏感和空字符串情况。

2) 【原理/概念讲解】回文判断的核心是检查字符串是否对称。我们可以用双指针技术,一个指针从字符串开头(左指针),一个从末尾(右指针),逐步向中间移动,比较对应位置的字符。处理时,先统一大小写(如将所有字符转换为小写),若验证码仅包含字母数字,还需跳过非目标字符。比较时,若任意位置字符不等,则直接判定为非回文;若所有比较都相等且指针相遇,则判定为回文。空字符串本身是回文,因为正反读结果一致。

类比:就像数轴上的两个指针,左指针从左往右走,右指针从右往左走,检查两端是否对称,就像镜子里的文字,左右完全一样就是回文。

3) 【对比与适用场景】

方法时间复杂度空间复杂度适用场景注意点
双指针法O(n)O(1)移动端验证码、字符串快速判断需处理大小写和空格,跳过非目标字符
压栈法O(n)O(n)需要原字符串不变的场景适合需要额外存储空间的情况
反转后比较O(n)O(n)不需要原字符串不变,且空间允许需额外空间存储反转后的字符串

4) 【示例】
输入字符串 "Aba":

  • 转换为小写:"aba"
  • 左指针 i=0(字符 'a'),右指针 j=2(字符 'a'),比较相等;
  • 移动指针,i=1(字符 'b'),j=1(字符 'b'),比较相等;
  • 指针相遇,判定为回文。

输入字符串 "Abc":

  • 转换为小写:"abc"
  • 左指针 i=0(字符 'a'),右指针 j=2(字符 'c'),比较不等,判定为非回文。

5) 【面试口播版答案】
面试官,您好。这个问题要判断字符串是否是回文,需要考虑空字符串和大小写不敏感。我的思路是用双指针法,从字符串两端向中间移动,比较对应字符。首先,处理大小写,把所有字符转换为小写(比如 'A' 变成 'a'),然后跳过非字母数字字符(如果验证码只包含这些的话)。然后,左指针从0开始,右指针从字符串长度-1开始,逐步向中间移动,每次比较左指针和右指针指向的字符,若不等则直接返回false;若所有比较都相等,且指针相遇,则返回true。空字符串本身是回文,因为正反读都一样。时间复杂度是O(n),因为每个字符最多比较一次;空间复杂度是O(1),只用了两个指针,没有额外存储。在移动端场景,比如验证码输入检查,用户输入验证码后,快速判断是否正确,双指针法能高效处理,适合资源有限的移动设备。

6) 【追问清单】

  • 问:如果需要处理空格和标点符号,应该怎么处理?
    回答:跳过非字母数字字符,只比较有效字符。
  • 问:如何优化空间复杂度?
    回答:双指针法已经是O(1),不需要额外空间。
  • 问:如果字符串很长(如百万字符),双指针法是否还能高效?
    回答:是的,因为每个字符只遍历一次,时间复杂度O(n),空间O(1),适合大数据量。
  • 问:有没有可能用递归?
    回答:递归会消耗栈空间,空间复杂度可能变成O(n),不如双指针高效。
  • 问:如果字符串包含Unicode字符(如中文),怎么处理?
    回答:统一转换为Unicode小写,然后比较。

7) 【常见坑/雷区】

  • 忽略空字符串是回文的情况,导致判断错误。
  • 忽略大小写不敏感,直接比较原字符串,导致'Aba'判断为非回文。
  • 忽略空格和标点,比如"Racecar!",若不跳过标点,判断错误。
  • 时间复杂度计算错误,比如认为需要O(n²),因为错误地考虑了多次比较。
  • 空间复杂度误判,比如用了反转字符串的方法,空间复杂度变成O(n)。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1