侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1823 篇文章
  • 累计收到 0 条评论

实现一个方法判断字符串是否为回文

2025-12-12 / 0 评论 / 4 阅读

题目

实现一个方法判断字符串是否为回文

信息

  • 类型:问答
  • 难度:⭐

考点

字符串处理, 方法定义, 条件判断

快速回答

实现步骤:

  1. 使用 gsub 和正则表达式移除非字母数字字符
  2. 通过 downcase 统一转换为小写
  3. 使用 reverse 反转字符串后与原字符串比较
  4. 返回布尔值结果
## 解析

原理说明

回文字符串指正序和倒序读都相同的字符串(忽略大小写和非字母数字字符)。核心处理流程:
1. 标准化字符串:移除非字母数字字符并统一大小写
2. 比较反转:检查处理后的字符串与其反转是否相同

代码示例

def palindrome?(str)
  # 移除非字母数字字符并转小写
  cleaned = str.gsub(/[^a-zA-Z0-9]/, '').downcase
  # 比较反转结果
  cleaned == cleaned.reverse
end

# 测试用例
puts palindrome?("A man, a plan, a canal: Panama") # true
puts palindrome?("Ruby")                           # false

最佳实践

  • 链式调用:合理使用 gsub.downcase 链式操作保持代码简洁
  • 正则优化/[^a-zA-Z0-9]/ 匹配非字母数字字符,^ 表示取反
  • 边界处理:空字符串应返回 true(空字符串反转后仍为空)

常见错误

错误示例问题分析修正方案
str.reverse == str未处理大小写和特殊字符先标准化字符串
gsub(' ', '')只能移除空格,无法处理其他字符使用正则表达式匹配

扩展知识

  • 性能优化:对于超长字符串,可使用双指针算法避免创建反转副本(时间复杂度 O(n))
  • Unicode 支持:处理多语言文本时需用 \p{Alnum} 替代 a-zA-Z0-9
  • API 参考String#reverse 时间复杂度 O(n),gsub 会创建新字符串对象