当前位置: 首页 > news >正文

reverse和substr用法

131. 分割回文串 - 力扣(LeetCode)

std::string对象本身不能直接加上整数来当做地址使用

在 C++ 中,std::reverse需要传入的是迭代器(Iterator),而不是简单的字符串对象加偏移量。

以下是具体的错误分析以及两种修复方案:

方案一:修复你现有的逻辑(利用迭代器)

要获取string的迭代器,需要使用.begin()。另外需要注意的是,C++ 标准库算法(如reverse)操作的区间通常是左闭右开[first, last)的。

如果你的end是子串的最后一个字符的下标(即包含在内),你需要写成tmp.begin() + end + 1

C++

#include <string> #include <algorithm> using namespace std; bool hui(string s, int start, int end) { string tmp = s; // 使用 .begin() 获取迭代器,并注意 C++ 是左闭右开区间 reverse(tmp.begin() + start, tmp.begin() + end + 1); return s == tmp; }

方案二:更优的标准做法(双指针法)

虽然方案一可以跑通,但在算法设计中,我们通常不推荐用这种方式来判断回文。

原因:

  1. 每次调用函数都要复制整个字符串string tmp = s;,浪费空间。

  2. 即使子串很短(例如长度为 3),最后依然要通过s == tmp比较整个母串,浪费时间。

更高效的做法是使用“双指针”:从两端向中间逼近,只检查需要的那个子串,时间复杂度降低到 $O(N)$,空间复杂度降低到 $O(1)$。

C++

#include <string> using namespace std; // 建议将参数改为 const string&,避免不必要的字符串拷贝 bool hui(const string& s, int start, int end) { while (start < end) { if (s[start] != s[end]) { return false; // 只要有一处不匹配,就不是回文 } start++; end--; } return true; // 全部匹配,是回文 }

总结:

如果你只是想修好当前的语法错误,把tmp + start改为tmp.begin() + start即可;如果你是在刷算法题(比如最长回文子串、回文分割等),强烈建议使用方案二的双指针法,这可以帮你避免因超时而导致的代码不通过。

  • substr(start, len)可以从字符串的start(从0开始)截取一个长度为len的字符串(缺省len时代码截取到字符串末尾).
http://www.jsqmd.com/news/1125108/

相关文章:

  • 手机内存不足怎么清理不删文件?免费方案+靠谱工具推荐|避坑指南
  • 鸿蒙应用安全认证实战:基于HUKS密钥库的签名验签方案详解
  • VRRTest:3步检测你的显示器可变刷新率是否真正工作
  • FModel:Unreal Engine游戏档案浏览器完整指南
  • ng系列.
  • 【OpenHarmony/HarmonyOs 】科学计算器实现细节:本地表达式解析、历史记录与零网络依赖
  • WebAssembly 跨语言数据格式:JSON 方便,但不一定便宜
  • AI机器学习高级数学与优化
  • 豆包AI vs DeepSeek:生活可用性与技术能力的范式之辨
  • AI写教材必备攻略!掌握这些技巧,低查重生成高质量教材不是梦
  • SQL注入从原理到实战:手工注入、绕过技巧与安全防御详解
  • LangGraph add_conditional_edges 完整详解
  • 实战指南:快速掌握ForgeGradle的完整构建流程
  • 豆包、千问下线智能体:不是 Agent 凉了,是野蛮生长期结束了
  • DeepBump三分钟上手教程:从平面图片到三维纹理的魔法转换
  • 镜像视界纯视觉无感定位视频孪生底层技术全解
  • STM32F405RG驱动WS2812 LED的嵌入式开发实践
  • DyberPet:重新定义桌面交互的虚拟伙伴开发框架
  • 配置文件的工程化管理:从环境变量到结构化配置的演化路径
  • 网络安全渗透测试入门:从DVWA到在线靶场的实战训练指南
  • AI 电动窗帘电机智能功率 高可靠及 IoT 智能联动 核心选型方案
  • DockDoor终极指南:重新定义macOS窗口管理与效率革命
  • League-Toolkit:英雄联盟智能游戏助手的革命性突破
  • 探索 Aqua,Hyperliquid 如何打通衍生品流动性向零售渗透的最终圣杯
  • UI自动化测试中span元素定位的5种核心技巧与最佳实践
  • 四大核心视频孪生底层技术专题解析:拓扑图谱打通跨镜全域连续轨迹,分区并行实现超大实景实时重建;空间大模型驱动AI前置风险推演,SpaceOS底座统一四维孪生算力根基。四大技术体系原生耦合闭环,构筑
  • GPT5.5 辅助论文写作实践:选题生成、文献整理与摘要润色流程
  • CRITIC-TOPSIS算法改进与MATLAB实现:供应链决策优化
  • 微信单向好友检测终极指南:3步快速识别谁删除了你
  • Kimi、GLM5、M2.7实战选型指南:按业务场景选最稳的大模型