代码随想录算法训练营第九天 |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.rhkb.cn/news/380923.html

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

相关文章

[Cesium for Supermap] 加载3dTiles,点击获取属性

代码&#xff1a; // 设为椭球var obj [6378137.0, 6378137.0, 6356752.3142451793];Cesium.Ellipsoid.WGS84 Object.freeze(new Cesium.Ellipsoid(obj[0], obj[1], obj[2]));var viewer new Cesium.Viewer(cesiumContainer);var scene viewer.scenescene.lightSource.ambi…

python 打包

#导出依赖文件列表 pip freeze > requirements.txt #安装对应文件 pip install -r requirements.txt #将依赖打成对应whl文件 pip wheel --wheel-dir ./dist -r ./requirements.txt #安装whl文件 pip install …whl

个人简约低调主页,三种主题风格源码

一、源码描述 这是一款简约低调的个人主页源码&#xff0c;提供了数百个精美的动画效果&#xff0c;拥有完美的视觉体验和交互体验&#xff0c;可操作性也达到了巅峰&#xff0c;源码支持三种主题风格&#xff0c;白色、黑色和蓝色渐变&#xff0c;所有这些效果都是通过原生Ja…

怎么压缩视频文件?简单的压缩视频方法分享

视频已成为我们日常生活中不可或缺的一部分。但随着视频质量的提高&#xff0c;文件大小也逐渐成为我们分享的阻碍。如何有效压缩视频文件&#xff0c;使其既能保持清晰&#xff0c;又能轻松分享&#xff1f;今天&#xff0c;给大家分享五种实用的视频压缩方法&#xff0c;快来…

Spring Boot 笔记1(启动类与控制器)

采用Spring Tool Suit 4 java jdk 17 学习启动类与控制器 创建Spring Starter Project 如果https://start.spring.io链接无效&#xff0c;可以选择https://start.aliyun.com 项目结构 启动类 启动类是程序的执行入口 例子1 Demo1Application.java package com.example.dem…

《从C/C++到Java入门指南》- 9.字符和字符串

字符和字符串 字符类型 Java 中一个字符保存一个Unicode字符&#xff0c;所以一个中文和一个英文字母都占用两个字节。 // 计算1 .. 100 public class Hello {public static void main(String[] args) {char a A;char b 中;System.out.println(a);System.out.println(b)…

Django cursor()增删改查和shell环境执行脚本

在Django中&#xff0c;cursor()方法是DatabaseWrapper对象&#xff08;由django.db.connectio提供&#xff09;的一个方法&#xff0c;用于创建一个游标对象。这个游标对象可以用来执行SQL命令&#xff0c;从而实现对数据库的增删改查操作。 查询&#xff08;Select&#xff0…

对象存储解决方案:高性能分布式对象存储系统MinIO

文章目录 引言I 自动化数据管理界面1.1 图形用户界面:GUI1.2 命令行界面:MinIO CLI1.3 应用程序编程接口:MinIO APIII 部署集成2.1 建议使用RPM或DEB安装方式2.2 创建环境变量文件2.3 启动MinIO服务2.4 将NGINX用作反向代理,配置负载。III 基础概念3.1 为什么是对象存储?3…

Python入门------pycharm加载虚拟环境

pycharm虚拟环境配置&#xff1a; 在按照前面的办法&#xff0c;配置好虚拟环境后,如果我们需要到虚拟环境开发&#xff0c;就需要给编译器配置虚拟环境 1.打开编译器&#xff0c;点击右下角的interpreter选项 2. 点击ADD Interpreter,添加虚拟环境 3. 因为我们使用的是原始…

CUDA编程00 - 配置CUDA开发环境

第一步&#xff1a; 在一台装有Nvidia显卡和驱动的机器上&#xff0c;用nvidia-smi命令查看显卡所支持cuda版本 第二步&#xff1a; 到Nvidia官网下载CUDA Toolkit并安装&#xff0c;CUDA Toolkit Archive | NVIDIA Developer 安装时按提示下一步即可&#xff0c;安装完成用 …

Linux源码安装的Redis如何配置systemd管理并设置开机启动

文章目录 实验前提实验 实验前提 已完成源码安装并能正常启动redis /usr/local/bin/redis-server能正常启动redis 实验 vim /etc/systemd/system/redis.service内容如下&#xff1a; [unit] Descriptionredis-server Afternetwork.target[Service] Typeforking ExecStart/…

JMeter介绍、安装配置以及快速入门

文章目录 1. JMeter简介2. JMeter安装配置3. JMeter快速入门 1. JMeter简介 Apache JMeter是一款开源的压力测试工具&#xff0c;主要用于测试静态和动态资源&#xff08;如静态文件、服务器、数据库、FTP服务器等&#xff09;的性能。它最初是为测试Web应用而设计的&#xff…

/秋招突击——7/21——复习{堆——数组中的第K大元素}——新作{回溯——全排列、子集、电话号码的字母组合、组合总和}

文章目录 引言复习数组中的第K大的最大元素复习实现参考实现 新作46 全排列个人实现参考实现 子集个人实现参考实现 电话号码的字母组合复习实现 组合总和个人实现参考实现 总结 引言 昨天的科大讯飞笔试做的稀烂&#xff0c;今天回来好好练习一下&#xff0c;主要是针对下述两…

GIS技能大赛解题过程(1)

试题要求&#xff1a;制作一幅广西区域发展布局示意图&#xff0c;最终成图参考如下。 做题步骤 一、创建数据库&#xff0c;整合数据入库 要求&#xff1a; 【解题步骤】 1、新建数据库命名为中间数据库.gdb&#xff0c;右键点击【export】导入数据&#xff0c;可以将数据拖…

单链表算法 - 链表分割

链表分割_牛客题霸_牛客网现有一链表的头指针 ListNode* pHead&#xff0c;给一定值x&#xff0c;编写一段代码将所有小于x的。题目来自【牛客题霸】https://www.nowcoder.com/practice/0e27e0b064de4eacac178676ef9c9d70思路: 代码: /* struct ListNode {int val;struct List…

防火墙--内容安全

目录 概述 IAE引擎流程 DPI深度包检测 基于特征字的检测技术 基于应用网关的检测技术 基于行为模式的检测技术 DFI深度流检测 基于数据流进行识别检测的技术 DPI和DFI对比 IDS&#xff08;入侵检测&#xff09; IPS&#xff08;入侵防御&#xff09; 优势 入侵检测…

JVM之经典垃圾回收器

1.垃圾回收器的分类 处理范围划分&#xff1a; 新生代垃圾回收器&#xff1a;serial、parNew、parallel scavenge&#xff1b; 老年代垃圾回收器&#xff1a;serial Old、parallel Old、CMS&#xff1b; 整堆收集器&#xff1a;G1、ZGC&#xff1b; 2.Serial GC Serial是单…

数据结构——线性表(循环链表)

一、循环链表定义 将单链表中终端结点的指针端由空指针改为指向头结点&#xff0c;就使整个单链表形成一 个环&#xff0c;这种头尾相接的单链表称为单循环链表&#xff0c;简称循环链表(circular linked list)。 循环链表解决了一个很麻烦的问题。如何从当中一 个结点出发&am…

STM32测测速---编码电机读取速度的计算

1、首先先了解一下计算的公式 速度计算&#xff1a; 轮胎每转一圈的脉冲数取决于编码器的分辨率&#xff0c;可由下面公式进行计算&#xff1a; PPR是电机的线数 以GA25-370电机为例。 图片来源&#xff1a;第四节&#xff1a;STM32定时器&#xff08;4.JGA25-370霍尔编码器…

【23】Android高级知识之Window(四) - ThreadedRenderer

一、概述 在上一篇文章中已经讲了setView整个流程中&#xff0c;最开始的addToDisplay和WMS跨进程通信的整个过程做了什么。继文章Android基础知识之Window(二)&#xff0c;这算是另外一个分支了&#xff0c;接着讲分析在performTraversals的三个操作中&#xff0c;最后触发pe…