StringBuilder.reverse() 是回文检查中最简洁的翻转方式,它原地修改、性能高、代码少,比手动循环或 StringBuffer 更适合单线程场景。

直接用 StringBuilder.reverse() 是回文检查中最简洁的翻转方式,它原地修改、性能高、代码少,比手动循环或 StringBuffer 更适合单线程场景。
为什么 reverse() 适合回文检查
StringBuilder.reverse() 时间复杂度为 O(n),内部通过双指针交换字符实现,不创建新对象,内存友好。回文检查只需“原串”和“翻转串”是否相等,而 reverse() 正好一步到位提供后者。
标准回文检查写法(含大小写与空格处理)
实际应用中常需忽略大小写、空格和标点。建议先清洗再翻转:
- 用
replaceAll("[^a-zA-Z0-9]", "")提取字母数字字符 - 转为小写统一比较基准
- 构建
StringBuilder后调用reverse() - 用
toString().equals()比较原始清洗串与翻转串
示例:
立即学习“Java免费学习笔记(深入)”;
String s = "A man, a plan, a canal: Panama";
String cleaned = s.replaceAll("[^a-zA-Z0-9]", "").toLowerCase();
String reversed = new StringBuilder(cleaned).reverse().toString();
boolean isPalindrome = cleaned.equals(reversed); // true
注意 reverse() 的副作用与线程安全
reverse() 会修改原 StringBuilder 对象,后续若还需原始内容,应避免复用同一实例。它不是线程安全的——多线程环境下请改用 StringBuffer(但性能略低)。单线程回文校验中,StringBuilder 是更优选择。
替代方案对比:什么时候不该用 reverse()
如果只判断回文而不需翻转后的字符串,双指针首尾比对更省空间(O(1) 额外空间 vs StringBuilder 的 O(n))。但若逻辑中后续还要用到翻转结果(如输出提示、二次处理),reverse() 依然最直观高效。


















