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

字符串day8

151 反转字符串中的单词

三个步骤
1、清除掉所有额外的空格,使用快慢指针方法
2、反转一整个字符串
3、根据空格,将空格之间的单词再反转

class Solution{
public:void reverse(string& s,int start,int end){  //倒序start和end之间闭区间的字符串for (int i=start,j=end;i<j;i++,j--){swap(s[i],s[j]);}}void removeExtraSpaces(string& s){//去除全部空格,在单词之间加上空格,使用快慢指针法int slow=0;for(int i=0;i<s.size();++i){if(s[i]!=' '){//快指针遇到非空格,也就是说遇到单词了if(slow!=0)s[slow++]=' ';//slow!=0说明不是首单词,需要加上一个空格,如果开头有空格那么并不需要处理while(i<s.size()&&s[i]!=' '){  //快慢指针,将slow的位置复制上fast的字符,直到空格为止s[slow++] = s[i++];}}}s.resize(slow); //截断(包括resize)}string reverseWords(string s){removeExtraSpaces(s);reverse(s,0,s.size()-1);int start = 0;for (int i=0;i<=s.size();++i){if (i==s.size()||s[i]==' '){  //到达空格或者字符串尾,进行反转reverse(s,start,i-1);//反转左闭右闭start = i+1;}}return s;}
};

右旋字符串

思路就是 通过 整体倒叙,把两段子串顺序颠倒,两个段子串里的的字符在倒叙一把,负负得正,

#include<iostream>
#include<algorithm>
using namespace std;
int main() {int n;string s;cin >> n;cin >> s;int len = s.size(); //获取长度reverse(s.begin(), s.end()); // 整体反转reverse(s.begin(), s.begin() + n); // 先反转前一段,长度nreverse(s.begin() + n, s.end()); // 再反转后一段cout << s << endl;}

28 实现strStr()

重点,需要理解KMP算法

http://www.xdnf.cn/news/9552.html

相关文章:

  • 制造业数字化转型之路:再造盈利模式,重塑客户价值
  • 深入理解JavaScript设计模式之call,apply,this
  • 【LangGraph 入门指南】为智能代理打造灵活可控的工作流框架
  • 运维三剑客——sed
  • Redis 的内存回收机制
  • HAWQ 取代传统数仓实践(十八) —— 层次维度
  • DeePNAP:一秒预测蛋白-DNA/蛋白-RNA结合强度
  • 安装nginx
  • Qt使用智能指针
  • 桌面系统核桃派部署自启服务
  • 传感器技术的演进与测试方法探究
  • 数据科学 vs. 大数据:一场“烧脑”但有温度的较量
  • Spring AI 多模型智能协作工作流实现指南
  • AI Agent开发第76课-Dify N8n一类的AI流程“出轨“时会爆发什么样的工程灾难
  • 用python制作一个打地鼠游戏
  • 主要国产数据库及其典型应用场景
  • 每天掌握一个Linux命令 - ps
  • 多因素身份鉴别组合方案及应用场景
  • MySQL----视图的创造和使用
  • 篇章六 数据结构——链表(二)
  • 某标杆房企BI平台2.0升级实践
  • 系统思考:心智模式与业务创新
  • LiveGBS海康、大华、宇视、华为摄像头GB28181国标语音对讲及语音喊话:摄像头设备与服务HTTPS准备
  • 工业总线的“F1赛车“与“越野车“:从控制周期解读EtherCAT与CANopen
  • 镍钯金PCB为什么很难做?
  • 伽罗华域(galois field)的乘法计算(异或法)
  • 前后端传输 Long 类型数据时(时间戳,雪花算法ID),精度丢失的根本原因
  • JavaSE核心知识点04工具
  • WebFuture:后台离开站点提示设置关闭后无效
  • 基于Matlab实现指纹识别系统