代码随想录阅读笔记-字符串【右旋字符串】

题目

字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。

例如,对于输入字符串 "abcdefg" 和整数 2,函数应该将其转换为 "fgabcde"。

输入:输入共包含两行,第一行为一个正整数 k,代表右旋转的位数。第二行为字符串 s,代表需要旋转的字符串。

输出:输出共一行,为进行了右旋转操作后的字符串。

样例输入:

2
abcdefg 

样例输出:

fgabcde

数据范围:1 <= k < 10000, 1 <= s.length < 10000;

思路 

为了让本题更有意义,提升一下本题难度:不能申请额外空间,只能在本串上操作。 (Java不能在字符串上修改,所以使用java一定要开辟新空间)不能使用额外空间的话,模拟在本串操作要实现右旋转字符串的功能还是有点困难的。那么我们可以想一下上一题目中讲过的使用整体反转+局部反转就可以实现反转单词顺序的目的。

本题中,我们需要将字符串右移n位,字符串相当于分成了两个部分,如果n为2,符串相当于分成了两个部分,如图: (length为字符串长度),下面引用原文作者的图示:

右移n位, 就是将第二段放在前面,第一段放在后面,先不考虑里面字符的顺序,是不是整体倒叙不就行了。如图:

此时第一段和第二段的顺序是我们想要的,但里面的字符位置被我们倒叙,那么此时我们在把 第一段和第二段里面的字符再倒叙一把,这样字符顺序不就正确了。 如果:

其实,思路就是 通过 整体倒序,把两段子串顺序颠倒,两个子串里的的字符再倒序,负负得正,这样就不影响子串里面字符的顺序了。

整体代码如下:

#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;} 

那么整体反转的操作放在下面,先局部反转行不行?

可以的,不过,要记得 控制好 局部反转的长度,如果先局部反转,那么先反转的子串长度就是 len - n,如图:

代码如下:

#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.begin() + len - n); // 先反转前一段,长度len-n ,注意这里是和版本一的区别reverse(s.begin() + len - n, s.end()); // 再反转后一段reverse(s.begin(), s.end()); // 整体反转cout << s << endl;}

如果题目拓展到字符串左旋转该怎么处理呢,其实思路是一样一样的,就是反转的区间不同而已。如果本题是左旋转n,那么实现代码如下:

#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.begin() + n); //  反转第一段长度为n reverse(s.begin() + n, s.end()); // 反转第二段长度为len-n reverse(s.begin(), s.end());  // 整体反转cout << s << endl;}

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

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

相关文章

【STL源码剖析】【2、空间配置器——allocator】

文章目录 1、什么是空间配置器&#xff1f;1.1设计一个简单的空间配置器&#xff0c;JJ::allocator 2、具备次配置力( sub-allocation)的 SGI 空间配置器2.1 什么是次配置力2.2 SGI标准的空间配置器&#xff0c;std::allocator2.2 SGI特殊的空间配置器&#xff0c;std::alloc2.…

录视频的软件推荐,助力视频内容创作

随着网络技术的发展和在线教育的兴起&#xff0c;录制视频教程的需求日益增加。无论是制作教学课程、分享办公技巧&#xff0c;还是录制游戏过程&#xff0c;一款好用的录屏软件都至关重要。本文将深入介绍三款录视频的软件&#xff0c;帮助读者了解它们的特点和操作步骤&#…

OSPF外部路由及外部路由引入过程

OSPF自治域&#xff08;同运行了OSPF协议的设备&#xff09;&#xff1b;O_ASE——代表OSPF的外部路由&#xff08;优先级150&#xff09;&#xff1b;1类LSA除了描述本身的直连状态、还描述本身的设备角色。 ASBR——自治系统边界路由器&#xff1b;同种路由协议也可做路由引…

谁能成为OpenAI的现实竞争对手吗?

文 | BFT机器人 前言&#xff1a; 自从与ChatGPT一起出现以来&#xff0c;OpenAI一直主导着人工智能市场&#xff0c;但它仍处于早期阶段。人工智能的历史可以追溯到几十年之前。但2022年11月ChatGPT的发布使生成式人工智能 (GenAI) 成为人们关注的焦点。从那时起&#xff0c;…

汽车研发项目管理数字化平台之阀门管理

阀门管理&#xff0c;在汽车研发流程中占据着举足轻重的地位&#xff0c;是确保项目精细化、系统化的关键所在。这一机制的核心在于通过设立“阀门”来控制和管理研发流程中的关键节点&#xff0c;从而确保项目在质量、进度和资源等方面均符合预期目标。在汽车行业高度竞争和持…

学习网络编程No.14【数据链路层ARP理解】

引言&#xff1a; 北京时间&#xff1a;2024/3/14/9:20&#xff0c;简单聊一聊我的日常。昨天晚上十点左右更新完新的一篇文章&#xff0c;回到宿舍简简单单花了个两首歌的时间洗了个澡&#xff0c;然后为了保持形象吹了个头发&#xff0c;哈哈哈&#xff01;当然对比以前的我…

Uniapp + SpringBoot 开发微信H5项目 微信公众号授权登录 JAVA后台(一、配置使用微信公众平台测试公众号)

申请测试号进行调试开发&#xff0c;测试号拥有大部分服务号有的接口权限。 一、接口配置信息填写校验 这里需要填写一个URL和一个Token验证字符串 我这里是用了natapp内网穿透 将本地的后台8080端口服务映射到了 http://x7zws8.natappfree.cc https://natapp.cn/在natapp官网…

Linux(Ubuntu)下安装paddleocr详细教程

PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库&#xff0c;助力开发者训练出更好的模型&#xff0c;并应用落地。 1、 Ubuntu安装教程&#xff1a; 首先安装paddlepaddle&#xff1a;pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple 一般此项不会报错…

Redis的安装和部署教程(Windows环境)

一、安装Redis服务 1、下载Redis压缩包 以下这个是我网盘里面的&#xff08;这个是v8.0版本的&#xff0c;支持导入.rdb数据文件&#xff09; 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;x0f1 --来自百度网盘超级会员V5的分享 2、解压到文件夹 将下载的压缩…

【书生·浦语大模型实战营】学习笔记2

Lagent&#xff1a;智能体框架&#xff0c;实现将一个大语言模型转化为多种类型的智能体&#xff0c;更好地发挥InternLM的性能 浦语灵笔&#xff1a;视觉语言大模型 InternLM-Chat-7B智能对话Demo 环境准备 使用复制的internlm-demo环境 # 执行该脚本文件来安装项目实验环境…

Apple加速AI大跃进:最新发布的MM1 模型论文

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

四川宏博蓬达法律咨询有限公司:专业引领,法律护航

在这个法治社会中&#xff0c;法律服务已成为企业和个人不可或缺的重要支持。四川宏博蓬达法律咨询有限公司凭借其专业的服务态度和丰富的法律知识&#xff0c;在法律服务领域独树一帜&#xff0c;赢得了社会各界的广泛认可。 一、公司背景实力雄厚 四川宏博蓬达法律咨询有限公…

电脑怎么快速重装系统win7

电脑重装系统是解决软件问题、提升系统性能的常用手段。随着技术发展,一键重装系统成为了许多用户的首选方法,因为它简化了繁琐的操作步骤,节省了大量时间。尤其是对于非技术人员来说,一键重装提供了一种快速高效且不易出错的系统安装方式。如果你需要快速重装win7,那么可…

2024最新阿里云幻兽帕鲁搭建服务器_Palworld联机多人游戏

玩转幻兽帕鲁服务器&#xff0c;阿里云推出新手0基础一键部署幻兽帕鲁服务器教程&#xff0c;傻瓜式一键部署&#xff0c;3分钟即可成功创建一台Palworld专属服务器&#xff0c;成本仅需26元&#xff0c;阿里云服务器网aliyunfuwuqi.com分享2024年新版基于阿里云搭建幻兽帕鲁服…

易基因:人类大脑的单细胞DNA甲基化和3D基因组结构|Science

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 高通通量表观基因组分析技术可用于阐明大脑中细胞复杂性的基因调控程序。5-甲基胞嘧啶 (5mCs)是哺乳动物基因组中最常见的修饰碱基&#xff0c;大多数5mCs发生在胞嘧啶-鸟嘌呤二核苷酸&a…

git常见使用

1. 概念 分布式&#xff0c;有远程仓库和本地仓库的概念&#xff0c;因此要注意同步问题git是面向对象的&#xff0c;本质是内容寻址系统。.git目录下有个文件夹objects&#xff0c;存储git库中的对象&#xff0c;git就是根据object建立一种树形结构&#xff0c;将文件和通过h…

spring 没完没了

start 轻量级开源的j2ee框架&#xff0c;容器框架 装javabean aop ioc 定义一个starter的jar包&#xff0c;写一个configuration配置类&#xff0c;将bean定义其中&#xff0c;在starter包的meta-inf/spring.factories中写入配置类&#xff0c;springboot会按约定加载该配置类 …

用户留存【摘录】

留存&#xff0c;是一个产品或者说企业&#xff0c;能够持续存活和不断发展的立身之本。 例如企业级SaaS产品&#xff0c;通常采用按年为单位进行付费的订阅模式。如果产品没有留住用户的能力&#xff0c;用户便会在第二年取消订阅&#xff0c;这将使得企业之前的投入付之东流…

Ubuntu软件开发环境搭建

Ubuntu软件开发环境搭建 安装VMware Tools网络桥接更新软件源常用功能配置时间同步共享文件夹双向复制粘贴终端初始大小和字体设置安装必要的工具 常用指令 安装VMware Tools 点击虚拟机->安装VMware Tools… 打开终端&#xff0c;cd到/media/用户名/VMware Tools/下&#…