代码随想录算法训练营第九天 |LeetCode151.翻转字符串里的单词 卡码网:55.右旋转字符串

代码随想录算法训练营

Day 9 代码随想录算法训练营第九天 |LeetCode151.翻转字符串里的单词 卡码网:55.右旋转字符串


目录

  • 代码随想录算法训练营
  • 前言
    • LeetCode151.翻转字符串里的单词
    • 卡码网:55.右旋转字符串
  • 一、LeetCode151.翻转字符串里的单词
    • 1.题目链接
    • 2.思路
    • 3.题解
  • 二、卡码网:55.右旋转字符串
    • 1.题目链接
    • 2.思路
    • 3.题解
  • 字符串总结


前言

LeetCode151.翻转字符串里的单词

讲解文档

卡码网:55.右旋转字符串

讲解文档


一、LeetCode151.翻转字符串里的单词

1.题目链接

LeetCode151.翻转字符串里的单词

2.思路

(1)如何反转
先反转整个字符串,再逐个反转单词
如何反转单词:双指针
i作为单词起点,j作为单词终点,如果j遇到空格或j为n(到末尾),则说明i与j夹住一个单词,反转
(2)处理空格:双指针
(这里按照空间复杂度O(1)做的)
快指针fast指向要获取的元素,慢指针slow指向元素的新位置
1)字符串首的空格:如果为空格则fast++,直到fast遇到第一个不是空格的字符为止
2)去除单词间的多余空格:
连续空格则移动fast
不是连续空格则将s[fast]放进s[slow],slow和fast同时移动
3)去掉末尾空格
检查s[0]到s[slow-1]字符串末尾有无空格,若有,则左移slow
4)修改字符串大小

3.题解

class Solution {
public:void reverse(string& s, int i, int j) {while (i < j) {swap(s[i], s[j]);i++;j--;}}string cut(string s) {int slow = 0;int fast = 0;int n = s.size();while (fast < n && s[fast] == ' ') {fast++;}while (slow < n && fast < n) {if (fast > 0 && s[fast] == ' ' && s[fast - 1] == ' ') {fast++;} else {s[slow] = s[fast];slow++;fast++;}}while (s[slow - 1] == ' ' && slow > 0) {slow--;}s.resize(slow);return s;}string reverseWords(string s) {s = cut(s);int n = s.size();reverse(s, 0, n - 1);int i = 0;while (i < n) {int j = i;while (j < n && s[j] != ' ') {j++;}reverse(s, i, j - 1);i = j + 1;}return s;}
};

二、卡码网:55.右旋转字符串

1.题目链接

卡码网:55.右旋转字符串

2.思路

先整体反转,再将n-k和k各自反转
示意图示意图

也可以先反转局部,再反转整体

3.题解

先整体后局部

#include<bits/stdc++.h>
using namespace std;
void reverse(string &s,int l,int r)
{while(l<r){swap(s[l],s[r]);l++;r--;}
}
int main()
{int k ;string s;cin>>k;cin>>s;int n=s.size();reverse(s,0,n-1);reverse(s,0,k-1);reverse(s,k,n-1);cout<<s;return 0;
}

先局部后整体

#include<bits/stdc++.h>
using namespace std;
void reverse(string &s,int l,int r)
{while(l<r){swap(s[l],s[r]);l++;r--;}
}
int main()
{int k ;string s;cin>>k;cin>>s;int n=s.size();reverse(s,0,n-k-1);reverse(s,n-k,n-1);reverse(s,0,n-1);cout<<s;return 0;
}

字符串总结

1、字符串基础:字符串可以用字符数组或string类实现,一般用string类,因为相关接口更完备
2、双指针
(1)双指针实现反转字符
(2)填充问题:先给字符串扩容,再从后向前操作(例如:替换数字为number)
(3)双指针移除元素
快指针指向要获取的元素,慢指针指向元素的新位置
3、反转字符串:设计反转策略,可以先用纸笔写出反转的情况
先反转整体,再反转局部:LeetCode151.翻转字符串里的单词 卡码网:55.右旋转字符串
先反转局部,再反转整体:卡码网:55.右旋转字符串

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

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

相关文章

laravel为Model设置全局作用域

如果一个项目中存在这么一个sql条件在任何情况下或大多数情况都会被使用&#xff0c;同时很容易被开发者遗忘&#xff0c;那么就非常适用于今天要提到的这个功能&#xff0c;Eloquent\Model的全局作用域。 首先看一个示例&#xff0c;有个数据表&#xff0c;结构如下&#xff1…

一款国外开发的高质量WordPress下载站模板主题

5play下载站是由国外站长开发的一款WordPress主题&#xff0c;主题简约大方&#xff0c;为v1.8版本&#xff0c; 该主题模板中包含了上千个应用&#xff0c;登录后台以后只需要简单的三个步骤就可以轻松发布apk文章&#xff0c; 我们只需要在WordPress后台中导入该主题就可以…

大模型应用如何点燃?

▎****尽管在中国&#xff0c;关于大模型的商业模式的讨论尚显早期&#xff0c;但智能体&#xff0c;尤其是专业智能体&#xff0c;蕴藏着巨大的潜力。 ChatGPT 还没有颠覆世界。 身处“第三次信息革命”&#xff0c;很多人被浓烈的FOMO&#xff08;Fear of Missing Out&…

昇思25天学习打卡营第12天 | ResNet50图像分类

ResNet50在CIFAR-10数据集上的图像分类实践 在深入学习和实践使用ResNet50进行CIFAR-10数据集上的图像分类后&#xff0c;我对深度学习模型的构建、训练和优化有了更深刻的理解。本次学习经历涵盖了从理论探索到实际应用的全过程&#xff0c;以下是我的主要收获和反思。 1. 理…

(南京观海微电子)——电感的电路原理及应用区别

电感 电感是导线内通过交流电流时&#xff0c;在导线的内部及其周围产生交变磁通&#xff0c;导线的磁通量与生产此磁通的电流之比。 当电感中通过直流电流时&#xff0c;其周围只呈现固定的磁力线&#xff0c;不随时间而变化&#xff1b;可是当在线圈中通过交流电流时&am…

Jump Point Search(JPS)算法与A*算法

A* A*算法本质上讲是结合了DFS和BFS&#xff0c;针对当前起点先做一次BFS&#xff0c;再针对搜索的八个点做一次DFS BFS--广度优先算法&#xff08;Breadth First Search&#xff09; DFS A* 算法思想 A*的核心思想就是先进行一次BFS搜索&#xff0c;然后从这次BFS中找到距离…

python Requests库7种主要方法及13个控制参数(实例实验)

文章目录 一、Requests库的7种主要方法二、kwargs:控制访问的13个参数 一、Requests库的7种主要方法 序号方法说明1requests.request()&#xff1a;提交一个request请求&#xff0c;作为其他请求的基础2requests.get()&#xff1a;获取HTML网页代码的方法3requests.head()&…

基于重要抽样的主动学习不平衡分类方法ALIS

这篇论文讨论了数据分布不平衡对分类器性能造成的影响,并提出了一种新的有效解决方案 - 主动学习框架ALIS。 1、数据分布不平衡会影响分类器的学习性能。现有的方法主要集中在过采样少数类或欠采样多数类,但往往只采用单一的采样技术,无法有效解决严重的类别不平衡问题。 2、论…

9种二极管及其特点总结

二极管种类和特点 名字特点恒流二极管近些年出现&#xff0c;电压大于某个值&#xff0c;电流恒定&#xff0c;一般用于led普通二极管低频整流和续流&#xff0c;便宜&#xff0c;反向恢复时间us级别&#xff0c;PN结肖特基二极管比普通二极管反向关断更快&#xff0c;10ns级别…

智能硬件——0-1开发流程

文章目录 流程图1. 市场分析具体分析 2. 团队组建2. 团队组建早期团队配置建议配置一&#xff1a;基础型团队 (4人)配置二&#xff1a;扩展型团队 (6人)配置三&#xff1a;全面型团队 (7人) 3. 产品需求分析4. ID设计&#xff08;Industrial Design, 工业设计&#xff09;5. 结…

阿里云公共DNS免费版自9月30日开始限速 企业或商业场景需使用付费版

本周阿里云发布公告对公共 DNS 免费版使用政策进行调整&#xff0c;免费版将从 2024 年 9 月 30 日开始按照请求源 IP 进行并发数限制&#xff0c;单个 IP 的请求数超过 20QPS、UDP/TCP 流量超过 2000bps 将触发限速策略。 阿里云称免费版的并发数限制并非采用固定的阈值&…

Unity游戏开发入门:从安装到创建你的第一个3D场景

目录 引言 一、Unity的安装 1. 访问Unity官网 2. 下载Unity Hub 3. 安装Unity Hub并安装Unity编辑器 二、创建你的第一个项目 1. 启动Unity Hub并创建新项目 2. 熟悉Unity编辑器界面 3. 添加基本对象 4. 调整对象属性 5. 添加光源 三、运行与预览 引言 Unity&…

netty 自定义客户端连接池和channelpool

目录标题 客户端池化运行分析问题修复 客户端池化 通信完成之后&#xff0c;一般要关闭channel&#xff0c;释放内存。但是与一个服务器频繁的打开关闭浪费资源。 通过连接池&#xff0c;客户端和服务端之间可以创建多个 TCP 连接&#xff0c;提升消息的收发能力&#xff0c;同…

【深度学习】VGG-16原理及代码实现

1.原理及介绍 2.代码实现 2.1model.py import torch from torch import nn from torchsummary import summary import torch.nn.functional as Fclass VGG16(nn.Module):def __init__(self):super(VGG16, self).__init__()self.block1 nn.Sequential( # 用一个序列&#xf…

51单片机嵌入式开发:13、STC89C52RC 之 RS232与电脑通讯

STC89C52RC 之 RS232与电脑通讯 第十三节课&#xff0c;RS232与电脑通讯1 概述2 Uart介绍2.1 概述2.2 STC89C52UART介绍2.3 STC89C52 UART寄存器介绍2.4 STC89C52 UART操作 3 C51 UART总结 第十三节课&#xff0c;RS232与电脑通讯 1 概述 RS232&#xff08;Recommended Stand…

Github报错:Kex_exchange_identification: Connection closed by remote host

文章目录 1. 背景介绍2. 排查和解决方案 1. 背景介绍 Github提交或者拉取代码时&#xff0c;报错如下&#xff1a; Kex_exchange_identification: Connection closed by remote host fatal: Could not read from remote repository.Please make sure you have the correct ac…

HTML5大作业三农有机,农产品,农庄,农旅网站源码

文章目录 1.设计来源1.1 轮播图页面头部效果1.2 栏目列表页面效果1.3 页面底部导航效果 2.效果和源码2.1 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_4…

计算机三级嵌入式笔记(一)—— 嵌入式系统概论

目录 考点1 嵌入式系统 考点2 嵌入式系统的组成与分类 考点3 嵌入式系统的分类与发展 考点4 SOC芯片 考点5 数字&#xff08;电子&#xff09;文本 考点6 数字图像 考点7 数字音频与数字视频 考点8 数字通信 考点9 计算机网络 考点10 互联网 考纲&#xff08;2023&am…

2、如何发行自己的数字代币(truffle智能合约项目实战)

2、如何发行自己的数字代币&#xff08;truffle智能合约项目实战&#xff09; 1-Atom IDE插件安装2-truffle tutorialtoken3-tutorialtoken源码框架分析4-安装openzeppelin代币框架&#xff08;代币发布成功&#xff09; 1-Atom IDE插件安装 正式介绍基于web的智能合约开发 推…

【Vue3】响应式数据

【Vue3】响应式数据 背景简介开发环境基本数据类型对象数据类型使用 reactive 定义对象类型响应式数据使用 ref 定义对象类型响应式数据 ref 和 reactive 的对比使用原则建议 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0…