算法训练营第九天 | 字符串:总结篇

文章目录

    • 力扣 | 344 反转字符串
    • 力扣 | 514 反转字符串 || 
    • 剑指offer  05. 替换空格
    • 力扣 | 151 . 翻转字符串中的单词
    • 剑指offer 58-|| .左旋转字符串 

一、344 反转字符串 :

344. 反转字符串 - 力扣(LeetCode)

整体思路: 

        双指针思想,前后两个指针,同时向中间靠拢(两两交换 对应的值,后再同时移动)。

解决方案:

void reverseString(vector<char>& s) {int left=0;int right=s.size()-1;while( left <right ){swap(s[left],s[right]);left++;right--;}}

二、 514 反转字符串 ||

题目链接:

541. 反转字符串 II - 力扣(LeetCode)

整体思路:

       借助库函数 reverse  实现, 遍历字符串,每次  移动2k 。

补充:

    reverse() 函数 是C++中用于反转容器中的元素顺序。左闭右开。

函数原型: first 和 last 表示要反转的序列的起始和结束迭代器。

     template  < class BidirectionalIterator >
    void reverse (  BidirectionalIterator first  ,   BidirectionalIterator last  )  ;

解决方案:

string reverseStr(string s, int k) {int size = s.length();    //字符串的长度//每一段的是2kfor(int i = 0; i < size ; i += 2*k){//剩余的字符小于 2k 但是大于或等于kif( i+k <=size ){  reverse(s.begin()+i,s.begin()+i+k);}else{   //剩余得字符少于  k个reverse(s.begin()+i,s.end());}}return s;}

三、 剑指offer  05. 替换空格

题目链接:

LCR 122. 路径加密 - 力扣(LeetCode)

由于力扣下架了剑指offer, 所以跳转之后不是我们想要的题目。

题目描述:

        请实现一个函数,把字符串 s 中的每个空格替换成"%20"。(我们这里要求不能使用额外的空间)。

示例 1: 输入:s = "We are happy."
输出:"We%20are%20happy."

思路:

       遍历字符串 ,将原来的字符串扩大每个空格替换成"%20"之后的大小。然后双指针的思想,从后往前遍历,替换空格。

具体解决方案

string replaceSpace(string s){int legth = s.length();   //原始的长度int size = s.length();for (int i = 0; i < s.length(); i++) {if (s[i] == ' ') {size += 2;}}s.resize(size);    //重新设置s的大小//从后面往前遍历int kuai = legth-1, man = size-1;for ( ; kuai >= 0; kuai--) {if (s[kuai] == ' ') {s[man--] = '0';s[man--] = '2';s[man--] = '%';}else {s[man] = s[kuai];man--;}}return s;
}

 四、151 . 翻转字符串中的单词

题目链接

151. 反转字符串中的单词 - 力扣(LeetCode)

解题思路:

     1、去掉字符串多余的空格( 双指针的思想 )。

     2、将字符串整体翻转。

     3、再对局部进行翻转。

解题方案:

 string reverseWords(string s) {int kuai = 0, man = 0 ;for ( ; kuai < s.length(); kuai++ ) {if (s[kuai] != ' ') {  //遇到单词了//手动添加空格if (man != 0)  s[man++] = ' ';//收集单词while ( kuai < s.length() && s[kuai] != ' ') { //如果遇到空格则停止收集s[man++] = s[kuai++];}}}s.resize(man);//第一次整体翻转reverse(s.begin(), s.end());//第二次局部翻转int temp = 0;    //辅助 i 来记录一个区间int i = 0;while ( i < s.length() ) {if ( s[i]!= ' ') {i++;continue;}reverse( s.begin() + temp , s.begin() + i );temp = i + 1 ;i++;}//处理最后一个单词reverse(s.begin() + temp, s.end());return s;}

五、剑指offer 58-|| .左旋转字符串 

题目链接:

LCR 182. 动态口令 - 力扣(LeetCode)

思路:

      先整体翻转,再局部进行翻转。

解题方案:

string dynamicPassword(string password, int target) {//先整体翻转reverse( password .begin() , password.end());//然后局部翻转int size = password.length();reverse(password.begin() ,password.begin()+ (size-target));reverse(password.begin()+ (size-target), password.end());}

友情链接 (代码随想录)

代码随想录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/127966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot配置https

SSL &#xff1a; secure socket layer 是一种加密协议&#xff0c;SSL主要用于保护数据在 客户端和服务器之间的传输&#xff0c;&#xff0c;防止未经授权的访问和窃取敏感信息 在腾讯云申请ssl证书 申请了之后在我的域名中&#xff0c;&#xff0c;解析 解析了之后&…

【驱动开发】注册字符设备使用gpio设备树节点控制led三盏灯的亮灭

注册字符设备使用gpio设备树节点控制led三盏灯的亮灭 设备树&#xff1a; 头文件&#xff1a; #ifndef __HEAD_H__ #define __HEAD_H__ typedef struct {unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned int IDR;unsigned int OD…

物流小程序制作教程:从零到有,详细解析

随着互联网的快速发展&#xff0c;物流行业也逐渐实现了数字化转型。为了满足消费者对更加便捷、高效的服务需求&#xff0c;许多物流企业选择制作自己的小程序。本文将通过乔拓云网后台&#xff0c;带你轻松搭建物流小程序&#xff0c;主要分为以下几个部分&#xff1a; 一、进…

发送post请求、携带cookie、响应对象、高级用法

发送post请求 请求体中&#xff0c;两种方式&#xff1a;data{} ⇢ \dashrightarrow ⇢ 编码格式 urlencoded ⇢ \dashrightarrow ⇢ keyvalue&keyvaluejson{} ⇢ \dashrightarrow ⇢ 编码格式是json 使用方式&#xff1a; resrequests.post(url) 模拟登录 import …

Microsoft 365 管理自动化

Microsoft 365 服务被大多数组织广泛使用&#xff0c;每天生成的数据量巨大。解决 Microsoft 365 中的问题可能非常困难&#xff0c;并且使用多个管理中心来保护组织变得复杂。本机控制台还缺少某些批量管理任务、全面的审计报告和基于角色的精细访问控制。 Microsoft 360 管理…

云计算的思想、突破、产业实践

文章目录 &#x1f4d5;我是廖志伟&#xff0c;一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作者、产品软文创造者、技术文章评审老师、问卷调查设计师、个人社区创始人、开源项目贡献者。&#x1f30e;跑过十五…

【C++项目】高并发内存池项目第八讲 项目总结和面试问题分享

项目总结面试分享 1.项目总结1.1优点1.2不足1.3面试常见问题 2.面试分享项目部分C语法部分 项目源代码&#xff1a;高并发内存池 1.项目总结 1.1优点 增加动态申请的效率减少陷入内核的次数减少系统内存碎片提升内存使用率尽量减少锁竞争应用于多核多线程场景 1.2不足 当前…

有效的字母异位词[简单]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给定两个字符串s和t&#xff0c;编写一个函数来判断t是否是s的字母异位词。注意&#xff1a;若s和t中每个字符出现的次数都相同&#xff0c;则称s和t互为字母异位词。 示例 1: 输入: s "anagram", t "nagaram&quo…

万字解析设计模式之原型模式与建造者模式

一、原型模式 1.1概述 原型模式是一种创建型设计模式&#xff0c;其目的是使用已有对象作为原型来创建新的对象。原型模式的核心是克隆&#xff0c;即通过复制已有对象来创建新对象&#xff0c;而不是通过创建新对象的过程中独立地分配和初始化所有需要的资源。这种方式可以节…

shell script 案例二

需求&#xff0c;运行程序&#xff0c;用户输入firstname&#xff0c;回车&#xff0c;再次提示输入lastname&#xff0c;然后回车&#xff0c;屏幕打印fullname信息 注意&#xff1a;前期写程序要注意规范&#xff0c;方便以后自己写多了回头看可以看的懂&#xff0c;程序代码…

如何在麒麟上安装 ONLYOFFICE 桌面编辑器

我们很高兴地告诉大家&#xff0c;ONLYOFFICE 桌面编辑器现已上架麒麟软件商店。请阅读下文了解详情。 关于麒麟 麒麟是一款国产操作系统&#xff0c;主要是为了满足中国市场的需求和偏好而设计的。 它能够与各种硬件平台和软件应用程序的广泛兼容&#xff0c;因而受到认可。…

路由器如何设置IP地址

IP地址是计算机网络中的关键元素&#xff0c;用于标识和定位设备和主机。在家庭或办公室网络中&#xff0c;路由器起到了连接内部设备和外部互联网的关键作用。为了使网络正常运行&#xff0c;需要正确设置路由器的IP地址。本文将介绍如何设置路由器的IP地址&#xff0c;以确保…

性能测试 —— Jmeter日志查看与分析

一、Jmeter日志概览 Jmeter日志文件保存在bin目录中&#xff0c;名称为jmeter.log。我们可以在面板中直接察看日志&#xff0c;点击右上角黄色标志物可以打开日志面板&#xff0c;再次点击收起 另外&#xff0c;Jmeter可以很方便地设置日志输出级别&#xff1a; 通过这种方式修…

在最爱的秋天学习 linux 之 su 和 sudo

文章目录 [toc]你好&#xff0c;su你好&#xff0c;sudo关于 /etc/sudoers 文件四个 AliasDefaultssudo 授权配置语法 搞一下不就知道了配置 sudo免密切换到 root 用户查看当前 sudo 命令范围sudo 审计日志使用子配置文件的方式 开开心心享受生活&#xff0c;没事学学 Linux su…

腾讯云轻量级服务器哪个镜像比较好?

腾讯云轻量应用服务器镜像是什么&#xff1f;镜像就是操作系统&#xff0c;轻量服务器镜像系统怎么选择&#xff1f;如果是用来搭建网站腾讯云百科txybk.com建议选择选择宝塔Linux面板腾讯云专享版&#xff0c;镜像系统根据实际使用来选择&#xff0c;腾讯云百科来详细说下腾讯…

使用shardingJDBC中的雪花算法生成id

常用ID解决方案 数据库自增id 依靠数据库系统的功能实现&#xff0c;但是未来扩容麻烦主从切换时的不⼀致可能会导致重复发号性能瓶颈存在单台sql上 UUID 性能非常高&#xff0c;没有网络消耗无序的字符串&#xff0c;不具备趋势自增特性UUID太长&#xff0c;不易于存储&am…

Django开发实例总结(入门级、4.2.6、详细)

目录 概述 Django的核心组件包括 Django的项目结构 创建工程&#xff08;4.2.6&#xff09; 实例一&#xff1a;Hello world 实例二&#xff1a;访问一个自定义主页 实例三&#xff1a;通过登录跳转到主页 实例四&#xff1a;主页添加静态文件&#xff0c;包含js、css、…

Android开发笔记(三)—Activity篇

活动组件Activity 启动和结束生命周期启动模式信息传递Intent显式Intent隐式Intent 向下一个Activity发送数据向上一个Activity返回数据 附加信息利用资源文件配置字符串利用元数据传递配置信息给应用页面注册快捷方式 启动和结束 &#xff08;1&#xff09;从当前页面跳到新页…

0032Java程序设计-基于JavaEE的智能化酒店点餐收款系统的设计与实现论文

文章目录 摘 要目录系统设计开发环境 摘 要 酒店点餐收款系统是为了实现酒店餐饮自动化管理而设计的&#xff0c;它完全取代了原来酒店餐饮管理一直使用的人工处理的工作方式&#xff0c;并且避免了由于管理人员的工作疏忽以及管理质量问题所造成的各种错误&#xff0c;为及时…

C++并发与多线程(14) | condition_varible、wait、notify_one、notify_all

概念 当谈到并发编程,特别是在多线程或多进程的上下文中,条件变量(Condition Variables)、等待(wait)、通知一个(notify_one)和通知所有(notify_all)是常见的概念。它们用于协调线程的执行,以实现同步并避免竞争条件。以下是对每个术语的解释: 条件变量: 条件变量…