代码随想录刷题记录(二十七)——55. 右旋字符串

devtools/2024/11/15 5:42:22/

(一)问题描述

55. 右旋字符串(第八期模拟笔试)icon-default.png?t=O83Ahttps://kamacoder.com/problempage.php?pid=1065字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。 

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

输入描述:

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

输出描述:

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

输入示例:

2
abcdefg

输出示例:

fgabcde

提示信息

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

(二)解决思路

       和前面151.反转字符串中的单词思路类似,都是先整体反转,再将后k个元素和前n-k个元素分别局部反转。反转的方法可以用交换法,也可以用异或法。

       Java相对好解决一些,因为Java的String是不可以原地修改的,一定要借助额外空间,那么只需要将后k个元素先放入char数组/StringBuffer,再将前n-k个元素按顺序放进去就可以了。

 1. 局部反转法

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = Integer.parseInt(in.nextLine());String s = in.nextLine();int len = s.length();  //获取字符串长度char[] chars = s.toCharArray();reverseString(chars, 0, len - n - 1);  //反转前一段字符串,此时的字符串首尾是0,len - n - 1reverseString(chars, len - n, len - 1);  //反转后一段字符串,此时的字符串首尾是len - n,len - 1reverseString(chars, 0, len - 1);  //反转整个字符串System.out.println(chars);}public static void reverseString(char[] ch, int start, int end) {//异或法反转字符串,参照题目 344.反转字符串的解释while (start < end) {ch[start] ^= ch[end];ch[end] ^= ch[start];ch[start] ^= ch[end];start++;end--;}}
}

2. 借助额外空间

import java.util.*;
public class Main{public static String rightRotate(int num, String s){StringBuffer result=new StringBuffer();int end=s.length()-num;for(int i=0;i<num;i++,end++){result.append(s.charAt(end));}for(int i=0;i<s.length()-num;i++){result.append(s.charAt(i));}return result.toString();}public static void main(String args[]){Scanner scanner=new Scanner(System.in);if(scanner.hasNext()){int num=scanner.nextInt();String s=scanner.next();System.out.println(rightRotate(num,s));}}
}

http://www.ppmy.cn/devtools/133387.html

相关文章

JavaScript如何操作HTML:动态网页构建指南

JavaScript如何操作HTML&#xff1a;动态网页构建指南 在现代网页开发中&#xff0c;JavaScript不仅是实现网页交互性的关键技术&#xff0c;也是动态操作HTML文档对象模型&#xff08;DOM&#xff09;的重要工具。通过JavaScript&#xff0c;开发者可以在运行时修改网页的内容…

[C++]——位图与布隆过滤器

目录 一、前言 二、正文 1.位图 1.1 位图概念 1.2 位图的实现 1.2.1 Set 1.2.2 ReSet 1.2.3 Text 1.3 位图的应用 2.布隆过滤器 2.1布隆过滤器的提出 2.2 布隆过滤器概念 2.3 布隆过滤器的实现 2.3.1布隆过滤器的插入 2.3.2 布隆过滤器的查找 2.3.3 布隆过滤器…

021_SSH_Mysql校园播客系统(视频播放 评论)_lwplus87

摘 要 Internet是一个蕴藏着无穷资源的宝库&#xff0c;在资源共享和信息交换方面具有得天独厚的优势。21世纪的今天&#xff0c;上网已经成为很多人工作、生活中必不可少的一部分&#xff0c;这很大程度上是由于网页承载了任何一种媒介都无法比拟的丰富资源&#xff0c;网页…

Android 解决Java和Kotlin JDK编译版本不一致异常

异常信息 Execution failed for task :andcodec:compileDebugKotlin. > compileDebugJavaWithJavac task (current target is 1.8) and compileDebugKotlin task (current target is 17) jvm target compatibility should be set to the same Java version.Consider using …

Spark 新作《循序渐进 Spark 大数据应用开发》简介

《循序渐进Spark大数据应用开发》由清华大学出版社出版&#xff0c;已于近期上市。该书基于Spark 3.5.1编写&#xff0c;提供24个实战案例26个上机练习&#xff0c;可谓是目前市面上最新的Spark力作。 本文对《循序渐进Spark大数据应用开发》一书做个大致的介绍。 封面部分 …

软件工程 软考

开发大型软件系统适用螺旋模型或者RUP模型 螺旋模型强调了风险分析&#xff0c;特别适用于庞大而复杂的、高风险的管理信息系统的开发。喷泉模型是一种以用户需求为动力&#xff0c;以对象为为驱动的模型&#xff0c;主要用于描述面向对象的软件开发过程。该模型的各个阶段没有…

Python毕业设计选题:基于django+vue的论坛BBS系统

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 公告信息管理 帖子信息管理 签到积分管理 系统…

聚观早报 | 奥迪集团Q3财报;小鹏汽车宣布增程计划

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 11月8日消息 奥迪集团Q3财报 小鹏汽车宣布增程计划 苹果iOS 18.2新功能 iQOO Neo10 Pro配置细节曝光 Arm第二财…