双指针法是最简单可靠的c++回文判断方式,时间复杂度o(n/2)、空间复杂度o(1),通过首尾字符逐对比较实现,兼容c风格字符串和std::string,无需额外内存,且易于扩展忽略大小写或非字母数字字符等逻辑。
直接用双指针比对首尾字符,是最简单可靠的 C++ 回文判断方式,不需要额外空间、不依赖 STL 算法、兼容 C 风格字符串和 std::string。
用双指针遍历首尾字符
核心逻辑是:从字符串两端向中间逐对比较,一旦发现不等就返回 false;走到中间没出错就返回 true。适用于所有可随机访问的字符序列。
- 对
std::string s:用s[i]和s[j]比较,i从0开始,j从s.length() - 1开始 - 对 C 字符串(
const char* s):先用strlen(s)获取长度,再同上操作;注意检查空指针 - 忽略大小写?在比较前统一转小写,比如用
std::tolower(static_cast<unsigned char>(c))</unsigned> - 忽略非字母数字?需跳过非
std::isalnum字符,但要注意std::isalnum对char传参可能有符号扩展问题,应先转unsigned char
避免 std::reverse 创建副本
有人用 std::string rev = s; std::reverse(rev.begin(), rev.end()); return s == rev;,这会多分配一次内存、多拷贝一次数据,时间空间都是 O(n)。双指针是 O(1) 额外空间、O(n/2) 时间,实际快一倍以上,尤其对长字符串明显。