Arian Soleimanzadeh
  • 首页
  • 博客
  • 播客
  • 视频
  • 联系
العربيةArabic
DeutschGerman
EnglishEnglish
فارسیPersian
한국어Korean
中文Chinese
面板•快速联系

Languages

Choose your interface locale

ar

العربية

Arabic

de

Deutsch

German

en

English

English

fa

فارسی

Persian

ko

한국어

Korean

zh

中文

Chinese

预约咨询

发送一条简短消息——我会尽快回复。

LinkedIn快速回复
首页/文章/什么是 Palindrome?使用双指针和 TypeScript 判断回文
Algorithms文章

什么是 Palindrome?使用双指针和 TypeScript 判断回文

Palindrome 是从左向右和从右向左读取都相同的字符串或数字。本文介绍双指针、TypeScript、O(n)复杂度、字符串规范化以及常见面试变体。

2026年8月19日6 分钟阅读1 浏览
#Algorithms#Palindrome#Two Pointers#String Algorithms#TypeScript

Arian Soleimanzadeh

Software Engineer & Researcher

使用双指针从字符串两端向中间移动进行 Palindrome 回文判断的示意图

Arian Soleimanzadeh

AI · 代码 · 产品

研究 + 工程
本页目录
方法一:反转字符串方法二:Two Pointers忽略空格和标点符号数字回文递归方法Almost Palindrome相关问题Two Pointers 是通用技巧大小写问题常见面试题边界情况总结

Palindrome,也就是回文,指从前向后和从后向前读取都相同的字符串、数字或序列。

例如:

Code
1234
racecar
level
madam
1221

都是回文。

而:

Code
123
hello
algorithm
1234

不是。

回文判断虽然简单,却是学习 Two Pointers(双指针) 的经典问题。

方法一:反转字符串

最简单的方法是将字符串反转后与原字符串比较。

TypeScript
123
function isPalindrome(value: string): boolean {
  return value === value.split("").reverse().join("");
}

复杂度:

Code
12
Time: O(n)
Space: O(n)

因为需要创建新的反转字符串。

方法二:Two Pointers

更节省空间的方法是在字符串两端各放一个指针。

Code
123
r a c e c a r
↑           ↑
L           R

如果两个字符相同,就向中间移动。

TypeScript
123456789101112131415
function isPalindrome(value: string): boolean {
  let left = 0;
  let right = value.length - 1;

  while (left < right) {
    if (value[left] !== value[right]) {
      return false;
    }

    left++;
    right--;
  }

  return true;
}

复杂度:

Code
12
Time: O(n)
Space: O(1)

忽略空格和标点符号

一个经典示例是:

Code
1
A man, a plan, a canal: Panama

转换为小写并移除非字母数字字符后:

Code
1
amanaplanacanalpanama

它是回文。

也可以不创建新的字符串,而是在双指针移动过程中直接跳过无效字符。

数字回文

例如:

Code
123
121
1221
4554

也属于 Palindrome。

除了转成字符串,还可以从数学上反转数字:

TypeScript
1234567891011121314
function isNumberPalindrome(value: number): boolean {
  if (value < 0) return false;

  const original = value;
  let reversed = 0;

  while (value > 0) {
    const digit = value % 10;
    reversed = reversed * 10 + digit;
    value = Math.floor(value / 10);
  }

  return original === reversed;
}

递归方法

也可以递归比较字符串两端,然后继续检查内部区间。

时间复杂度仍然是 O(n),但递归调用栈需要额外 O(n) 空间,因此迭代式 Two Pointers 通常更合适。

Almost Palindrome

常见扩展问题是:

最多删除一个字符后,能否让字符串变成回文?

当第一次发现 mismatch 时,可以尝试跳过左侧字符或右侧字符,再判断剩余区间。

相关问题

Palindrome 是许多更复杂问题的基础,例如:

  • Longest Palindromic Substring
  • Palindromic Subsequence
  • Palindrome Partitioning
  • Valid Palindrome
  • Minimum Insertions

Two Pointers 是通用技巧

双指针还常用于:

  • Pair Sum
  • Remove Duplicates
  • Partitioning
  • Array Merge
  • Container With Most Water

因此回文判断是学习这一算法模式的良好起点。

大小写问题

Level 是否是回文取决于规则。

区分大小写时 L 与 l 不同;转换成 lowercase 后得到 level。

常见面试题

一个典型题目是:

忽略空格、标点符号和大小写,判断字符串是否为回文。

推荐方案:

Code
123
Two Pointers
Skip non-alphanumeric characters
Case-insensitive comparison

可以实现:

Code
12
Time: O(n)
Space: O(1)

边界情况

Code
12345
""        → true
"a"       → true
"aa"      → true
"ab"      → false
"racecar" → true

总结

Palindrome 是一个从两个方向读取都相同的序列。

标准算法使用 Two Pointers:

Pseudocode
12345
left  → start
right → end

compare
move inward

复杂度为:

Code
12
Time Complexity: O(n)
Space Complexity: O(1)

这个问题的重要意义不仅是判断回文,还在于学习对称比较、双指针、边界条件和空间优化等核心算法思维。

本页目录
方法一:反转字符串方法二:Two Pointers忽略空格和标点符号数字回文递归方法Almost Palindrome相关问题Two Pointers 是通用技巧大小写问题常见面试题边界情况总结

文章信息

发布时间、阅读时长和浏览数据。

发布

2026年8月19日

更新

2026年8月20日

阅读时长

6 分钟阅读

浏览

1

作者

Arian Soleimanzadeh

上一篇

什么是 Longest Common Substring?使用动态规划寻找最长公共子串

下一篇

什么是 Regular Expression Matching?使用动态规划和 TypeScript 理解 Regex

让我们构建清晰、快速而优雅的作品。

用于合作、咨询或产品工作的快速联系入口。

快速联系给我发邮件
Arian Soleimanzadeh

个人作品集,聚焦现代 Web 工程、UI 系统与实用型 AI 产品——干净的代码,清晰的设计。

快速链接

  • 关于
  • 博客
  • 项目
  • 联系

联系

  • info@ariansoleimanzadeh.site
  • soleimanzadeh.a.work@gmail.com

可联系时间: 工作日

通常回复时间在 24小时内。

订阅通讯

获取文章、项目与新版本发布的更新。

© 2026 ariansoleimanzadeh.site — 保留所有权利。

LinkedIn