55. 右旋字符串(卡码网KamaCoder)

文章目录

  • 55. 右旋字符串
    • 题目描述
    • 暴力
    • 优化:不能申请额外空间,只能在本串上操作
      • 思路
      • 代码

55. 右旋字符串

题目描述

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

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

输入描述

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

输出描述

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

输入示例

2
abcdefg

输出示例

fgabcde

提示信息

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

暴力

程序首先通过 cin 读取用户输入的旋转位数 n 和字符串 s。然后,它通过两个循环构造右旋转后的字符串 a:

  1. 第一个循环从字符串 s 中取出最后 n 个字符,这是因为右旋转操作的定义是将字符串尾部的若干字符移到字符串的前面。

  2. 第二个循环取出字符串 s 开头到指定位置 s.size() - n 的字符,即除去被旋转到前面的那部分字符。

最后,程序输出构造好的字符串 a 并结束。

// 包含C++的全局库,包含了大部分常用的C++库。
#include<bits/stdc++.h>
using namespace std;int main()
{int n; // 定义一个整数n,用来存储用户输入的旋转位数。string s, a; // 定义两个字符串,s用来接收用户输入的原始字符串,a用来存储旋转后的字符串。cin >> n >> s; // 从标准输入读取旋转位数和需要旋转的字符串。// 遍历并添加字符串s尾部的n个字符到字符串a。for(int i = s.size() - n; i < s.size(); i++)a += s[i];// 遍历并添加字符串s除去尾部n个字符的剩余部分到字符串a。for(int i = 0; i < s.size() - n; i++)a += s[i];// 输出旋转后的字符串a。cout << a << endl;// 程序正常结束返回0。return 0;
}

优化:不能申请额外空间,只能在本串上操作

思路

不能使用额外空间的话,模拟在本串操作要实现右旋转字符串的功能还是有点困难的。

那么我们可以想一下上一题目 151. 反转字符串中的单词 中讲过,使用整体反转+局部反转就可以实现反转单词顺序的目的。

本题中,我们需要将字符串右移n位,字符串相当于分成了两个部分,如果n为2,符串相当于分成了两个部分,如图: (length为字符串长度)
在这里插入图片描述
右移n位, 就是将第二段放在前面,第一段放在后面,先不考虑里面字符的顺序,是不是整体倒叙不就行了。如图:
在这里插入图片描述
此时第一段和第二段的顺序是我们想要的,但里面的字符位置被我们倒叙,那么此时我们在把 第一段和第二段里面的字符再倒叙一把,这样字符顺序不就正确了。 如果:
在这里插入图片描述
其实,思路就是 通过 整体倒叙,把两段子串顺序颠倒,两个段子串里的的字符在倒叙一把,负负得正,这样就不影响子串里面字符的顺序了。

代码

这个程序利用了反转操作(reverse 函数)的性质来实现字符串的右旋转。这种方法的核心在于:

  1. 反转整个字符串:将整个字符串 s 反转后,原来在尾部的k个字符现在会移到字符串的前面。

  2. 反转字符串的前 n 个字符:这将刚才移到前面的 n 个字符再次反转回它们原来的顺序。

  3. 反转字符串的剩余部分:将前 n 个字符之后的部分再次反转,这样这部分字符也回到了它们原来的顺序。

通过上述步骤,字符串的后 n 个字符被移动到了字符串的前面,实现了字符串的右旋转操作。

// 包含了大部分常用的C++库,简化了头文件的包含过程。
#include<bits/stdc++.h>
using namespace std;int main()
{int n; // 定义一个整数n,用来存储用户输入的旋转位数。string s; // 定义一个字符串s,用来接收用户输入的原始字符串。cin >> n >> s; // 从标准输入读取旋转位数和需要旋转的字符串。// 第一步:反转整个字符串。reverse(s.begin(), s.end());// 第二步:反转字符串的前n个字符(现在这部分字符位于字符串的开头)。reverse(s.begin(), s.begin() + n);// 第三步:反转字符串的剩余部分,即从第n个字符到字符串的末尾。reverse(s.begin() + n, s.end());// 输出旋转后的字符串。cout << s << endl;// 程序正常结束返回0。return 0;
}

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

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

相关文章

Spark SQL调优实战

1、新添参数说明 // Driver和Executor内存和CPU资源相关配置 --是否开启executor动态分配&#xff0c;开启时spark.executor.instances不生效 spark.dynamicAllocation.enabledfalse --配置Driver内存 spark.dirver.memory5g --driver最大结果大小&#xff0c;设置为0代…

SQLserver2008 r2 下载安装配置、使用、新建登录用户及通过Navicat远程连接

目录 一、下载 二、安装配置 1.安装 2.许可条款 3.安装程序支持文件 4.功能选择 5.实例配置 6.服务器配置 7.数据库引擎配置 8.Reporting Services 配置 9.安装进度 ​编辑 10.完成 三、使用 四、新建登录用户 1.新建登录名 2.常规 3.服务器角色 4. 用户映…

基于CNN+LSTM深度学习网络的时间序列预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 卷积神经网络&#xff08;CNN&#xff09; 4.2 长短时记忆网络&#xff08;LSTM&#xff09; 4.3 CNNLSTM网络结构 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MA…

Java设计模式大全:23种常见的设计模式详解(一)

本系列文章简介&#xff1a; 设计模式是在软件开发过程中&#xff0c;经过实践和总结得到的一套解决特定问题的可复用的模板。它是一种在特定情境中经过验证的经验和技巧的集合&#xff0c;可以帮助开发人员设计出高效、可维护、可扩展和可复用的软件系统。设计模式提供了一种在…

架构学习(四):scrapy下载中间件实现动态切换User-Agent

scrapy下载中间件实现动态与固定UserAgent 前言关卡&#xff1a;实现动态切换User-Agentscrapy设置User-Agent方式梳理User-Agent生效梳理为何选择在下载中间件中实现自定义User-Agent下载中间件 结束 前言 请求头User-Agent是比较常规的反爬手段&#xff0c;不同站点对其检测…

thinkphp6入门(17)-- 网站开发中session、cache、cookie的区别

Session&#xff08;会话&#xff09;: 定义&#xff1a; Session是一种用于在服务器端存储用户信息的机制&#xff0c;以跟踪用户的状态。 数据存储位置&#xff1a; 存储在服务器端&#xff0c;可以存在于内存、数据库或文件系统中。 生命周期&#xff1a; 存在于用户访问应…

离散数学——图论(笔记及思维导图)

离散数学——图论&#xff08;笔记及思维导图&#xff09; 目录 大纲 内容 参考 大纲 内容 参考 笔记来自【电子科大】离散数学 王丽杰

AI助力农作物自动采摘,基于YOLOv3全系列【yolov3tiny/yolov3/yolov3spp】参数模型开发构建作物生产场景下番茄采摘检测计数分析系统

去年十一那会无意间刷到一个视频展示的就是德国机械收割机非常高效自动化地24小时不间断地在超广阔的土地上采摘各种作物&#xff0c;专家设计出来了很多用于采摘不同农作物的大型机械&#xff0c;看着非常震撼&#xff0c;但是我们国内农业的发展还是相对比较滞后的&#xff0…

Dockerfile文件参数配置和使用

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

C# Socket通信从入门到精通(21)——Tcp客户端判断与服务器断开连接的三种方法以及C#代码实现

前言 我们开发的tcp客户端程序在连接服务器以后,经常会遇到服务器已经关闭但是作为客户端的我们不知道,这时候应该应该有一个机制我们可以实时监测客户端和服务器已经断开连接,如果已经断开了连接,我们应该及时报警提示用户客户端和服务器已经断开连接,本文介绍三种可以监…

幸福小院小区中央空调节能改造项目

空调计费是指“中央空调计费”&#xff0c;这种技术实际上是在对水、电、煤气的基础上发展起来的对冷热能量进行计量的一种计费系统技术。 节能改造项目&#xff1a;幸福小院小区&#xff0e; 项目情况需求&#xff1a; 该项目是小区住宅用户建筑&#xff0c;根据功能分区管理…

Vue中路由的使用

目录 1 作用 2 使用方法 2.1 安装路由 2.2 创建路由并导出 2.3 在应用实例中使用vue-router 2.4 声明router-view&#xff0c;展示组件内容 2.5 页面跳转 3 补充内容-子路由 1 作用 能够按不同的访问路径&#xff0c;展示不同组件的内容。 2 使用方法 2.1 安装路由 …

问题:塑瓷后的牙冠要比完成的牙冠大() #学习方法#其他

问题&#xff1a;塑瓷后的牙冠要比完成的牙冠大&#xff08;&#xff09; A.10% B.10%-15% C.15%-20% D.20%-30% E.50% 参考答案如图所示

springboot157基于springboot的线上辅导班系统的开发与设计

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

智能优化算法 | Matlab实现合作优化算法(CSA)(内含完整源码)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 智能优化算法 | Matlab实现合作优化算法(CSA)(内含完整源码) 源码设计 clear clc close SearchAgents_no=30; % Number of search agents Max_iteration=1000;

PiflowX新增Apache Beam引擎支持

参考资料&#xff1a; Apache Beam 架构原理及应用实践-腾讯云开发者社区-腾讯云 (tencent.com) 在之前的文章中有介绍过&#xff0c;PiflowX是支持spark和flink计算引擎&#xff0c;其架构图如下所示&#xff1a; 在piflow高度抽象的流水线组件的支持下&#xff0c;我们可以…

【Leetcode】1696. 跳跃游戏 VI

文章目录 题目思路代码结果 题目 题目链接 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 一开始你在下标 0 处。每一步&#xff0c;你最多可以往前跳 k 步&#xff0c;但你不能跳出数组的边界。也就是说&#xff0c;你可以从下标 i 跳到 [i 1&#xff0c; min(n -…

sqli.labs靶场(54-65关)

54、第五十四关 提示尝试是十次后数据库就重置&#xff0c;那我们尝试union 原来是单引号闭合 id-1 union select 1,database(),(select group_concat(table_name) from information_schema.tables where table_schemadatabase()) -- 数据库&#xff1a;challenges&#xff0c…

【计算机网络】计算机网络复习资料(期末)

复习要点 一、填空题 1.计算机网络的两个重要基本特点 连通性、共享 2&#xff0e;计算机中的端口号类型 两类端口号 { 服务器端 { 熟知端口号&#xff08;系统端口号&#xff09;数值为0~1023 登记端口号&#xff0c;1024~49151 } 客户端使用的端口号&#xff1a;短…

米桃安全漏洞讲堂系列第2期:XSS跨站脚本攻击漏洞

一、一次钓鱼攻击引发的反制 某日&#xff0c;安全团队收到监控预警&#xff0c;有外部人员使用钓鱼邮件对公司内部人员进行信息诈骗。安全团队立即开始分析事件进程。 攻击者以劳动补贴名义群发邮件&#xff0c;诱导内部员工扫描二维码&#xff0c;进而填写个人信息、银行卡等…