剑指Offer 58.左旋转字符串

58.左旋转字符串

目录

  • 58.左旋转字符串
  • 题目
  • 代码(字符串拼接)
    • 利用切片函数
    • 同余简化代码
    • 利用StringBuilder
  • 面试:StringBuilder与String的使用比较

题目

官网地址
在这里插入图片描述

代码(字符串拼接)

class Solution {public String reverseLeftWords(String s, int k) {String result="";for(int i=k;i<s.length();i++){char c=s.charAt(i);result+=c;}for(int i=0;i<k;i++){char b=s.charAt(i);result+=b;}return result;}
}

首先,创建一个空字符串result,用于存储旋转后的结果。

第一个循环从索引k开始遍历原始字符串s的字符。循环的终止条件是i小于s的长度。在每次迭代中,将当前索引i处的字符c追加到result中。

第二个循环从索引0到索引k-1遍历原始字符串s的字符。循环的终止条件是i小于k。在每次迭代中,将当前索引i处的字符b追加到result中。

最后,将result作为方法的返回值。

利用切片函数

class Solution {public String reverseLeftWords(String s, int n) {return s.substring(n, s.length()) + s.substring(0, n);}
}

return s.substring(n, s.length()) + s.substring(0, n); 表达式实现了将字符串s从索引n开始的部分提取出来,然后与从索引0到索引n-1的部分进行拼接。

  • s.substring(n, s.length())提取了字符串s从索引n开始到末尾的子字符串。
  • s.substring(0, n)提取了字符串s从索引0到索引n-1的子字符串。

最后,使用字符串拼接操作符+将这两个子字符串拼接在一起,并作为方法的返回值。

同余简化代码

class Solution {public String reverseLeftWords(String s, int n) {String res = "";for(int i = n; i < n + s.length(); i++)res += s.charAt(i % s.length());return res;}
}

在每次迭代中,通过取模运算i % s.length()来确保索引不会超出字符串s的长度。这样可以实现循环遍历字符串的效果,即当i超过字符串长度时,会从字符串的开头重新开始。

最后,将res作为方法的返回值。

这里使用同余运算的原因是为了实现循环遍历字符串的效果,即当i超过字符串长度时,重新回到字符串的开头继续取字符。

利用StringBuilder

class Solution {public String reverseLeftWords(String s, int n) {StringBuilder res = new StringBuilder();for(int i = n; i < s.length(); i++)res.append(s.charAt(i));for(int i = 0; i < n; i++)res.append(s.charAt(i));return res.toString();}
}
  1. 首先,代码声明了一个新的StringBuilder对象,命名为res。在这里,我们使用StringBuilder来构建字符串。
  2. 接下来,使用一个循环从索引n开始遍历原始字符串s的字符。循环的终止条件是i小于s的长度。在每次迭代中,将当前索引i处的字符追加到res中。
  3. 然后,使用另一个循环从索引0到索引n-1遍历原始字符串s的字符。循环的终止条件是i小于n。在每次迭代中,将当前索引i处的字符追加到res中。
  4. 最后,通过调用res.toString()res转换为一个字符串

面试:StringBuilder与String的使用比较

StringBuilder和String是Java中用于处理字符串的两个不同的类。它们之间有一些重要的区别和使用场景,下面是它们之间的比较:

  1. 可变性: StringBuilder是可变的,而String是不可变的。这意味着StringBuilder的内容可以被修改,而String的内容不能被修改。当需要频繁地进行字符串的拼接、插入、删除等操作时,使用StringBuilder会更加高效,因为它避免了频繁创建新的字符串对象的开销。
  2. 线程安全性: StringBuilder是非线程安全的,而String是线程安全的。多个线程同时操作同一个StringBuilder对象可能会导致不可预期的结果。如果在多线程环境中进行字符串操作,应该使用StringBuffer类,它是StringBuilder的线程安全版本。
  3. 性能: 由于StringBuilder是可变的,它避免了频繁创建新的字符串对象的开销,因此在需要进行大量字符串的拼接、修改操作时,使用StringBuilder比使用String会更加高效。
  4. API功能: StringBuilder提供了一系列用于字符串操作的方法,如追加、插入、删除、替换、反转等。而String类提供了一些查询、截取、替换等基本操作的方法,但不能直接修改字符串的内容。
  5. 不可变性保证: String的不可变性保证了字符串对象的安全性和共享性。由于String是不可变的,可以将它们作为参数传递给方法、用作键值等,而不必担心它们被修改。而StringBuilder的可变性可能会导致对象的内容被意外修改。

在选择使用StringBuilder还是String时,需要根据具体的场景和需求进行权衡。如果需要频繁修改字符串内容或进行大量字符串拼接操作,应该使用StringBuilder以获得更好的性能。如果需要保证字符串的不可变性、线程安全性或作为常量使用,应该使用String。

需要注意的是,当需要将StringBuilder或StringBuffer对象转换为String时,可以使用它们的toString方法获取对应的字符串表示形式。

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

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

相关文章

【深度学习】在 MNIST实现自动编码器实践教程

一、说明 自动编码器是一种无监督学习的神经网络模型&#xff0c;主要用于降维或特征提取。常见的自动编码器包括基本的单层自动编码器、深度自动编码器、卷积自动编码器和变分自动编码器等。 其中&#xff0c;基本的单层自动编码器由一个编码器和一个解码器组成&#xff0c;编…

K8S 部署 RocketMQ

文章目录 添加模板部署本地访问 集群使用 kubesphere 作为工具 添加模板 添加 helm 模板 helm repo add rocketmq-repo https://helm-charts.itboon.top/rocketmq helm repo update rocketmq-repo编写 value.yaml 文件 配置主从节点的个数&#xff0c;例子为单节点 broker:…

snap xxx has “install-snap“ change in progress

error description * 系重复安装&#xff0c;进程冲突 solution 展示snap的改变 然后sudo snap abort 22即可终止该进程 之后重新运行install command&#xff5e;&#xff5e; PS: ubuntu有时候加载不出来&#xff0c;执行resolvectl flush-caches&#xff0c;清除dns缓存…

用python编写的软件有哪些,编写python 用什么软件

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;用python编写的软件有哪些&#xff0c;编写python 用什么软件&#xff0c;现在让我们一起来看看吧&#xff01; 随着互联网的迅速发展&#xff0c;新技术不断创新&#xff0c;万物互联的时代&#xff0c;企业对IT人员的…

【51单片机】晨启科技,酷黑版,音乐播放器

四、音乐播放器 任务要求&#xff1a; 设计制作一个简易音乐播放器&#xff08;通过手柄板上的蜂鸣器发声&#xff0c;播放2到4首音乐&#xff09;&#xff0c;同时LED模块闪烁&#xff0c;给人视、听觉美的感受。 评分细则&#xff1a; 按下播放按键A6开始播放音乐&#xff0…

SpringCloud入门Day01-服务注册与发现、服务通信、负载均衡与算法

SpringCloudNetflix入门 一、应用架构的演变 伴随互联网的发展&#xff0c;使用互联网的人群越来越多&#xff0c;软件应用的体量越来越大和复杂。而传统单体应用 可能不足以支撑大数据量以及发哦并发场景应用的框架也随之进行演变从最开始的单体应用架构到分布式&#xff08…

18. SpringBoot 如何在 POM 中引入本地 JAR 包

❤️ 个人主页&#xff1a;水滴技术 &#x1f338; 订阅专栏&#xff1a;成功解决 BUG 合集 &#x1f680; 支持水滴&#xff1a;点赞&#x1f44d; 收藏⭐ 留言&#x1f4ac; Spring Boot 是一种基于 Spring 框架的轻量级应用程序开发框架&#xff0c;它提供了快速开发应用程…

Palo Alto Networks® PA-220R 下一代防火墙 确保恶劣工况下的网络安全

一、主要安全功能 1、每时每刻在各端口对全部应用进行分类 • 将 App-ID 用于工业协议和应用&#xff0c;例如 Modbus、 DNP3、IEC 60870-5-104、Siemens S7、OSIsoft PI 等。 • 不论采用何种端口、SSL/SSH 加密或者其他规避技术&#xff0c;都会识别应用。 • 使用…

Python GUI编程(Tkinter)

Python GUI编程(Tkinter) Python 提供了多个图形开发界面的库&#xff0c;几个常用 Python GUI 库如下&#xff1a; Tkinter&#xff1a; Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows …

【硬件设计】模拟电子基础三--放大电路

模拟电子基础三--放大电路 一、集成运算放大器1.1 定义、组成与性能1.2 电流源电路1.3 差动放大电路1.4 理想运算放大器 二、集成运算放大器的应用2.1 反向比例运算电路2.2 同向比例运算电路2.3 反向加法运算电路2.4 反向减法运算电路2.5 积分运算电路2.6 微分运算电路2.7电压比…

浅析大数据时代下的视频技术发展趋势以及AI加持下视频场景应用

视频技术的发展可以追溯到19世纪初期的早期实验。到20世纪初期&#xff0c;电视技术的发明和普及促进了视频技术的进一步发展。 1&#xff09;数字化&#xff1a;数字化技术的发明和发展使得视频技术更加先进。数字电视信号具有更高的清晰度和更大的带宽&#xff0c;可以更快地…

软考高级架构师——2、操作系统

一、进程管理 • 进程的状态&#xff08;★&#xff09; • 进程的同步与互斥&#xff08;★★★★&#xff09; 临界资源&#xff1a;诸进程间需要互斥方式对其进行共享的资源&#xff0c;如打印机、磁带机等 临界区&#xff1a;每个进程中访问临界资源的那段代码称为临界区…

STM32(HAL)串口中断接收

目录 1、简介 2 基础配置 2.1.1 SYS配置 2.1.2 RCC配置 2.2 串口外设配置 2.3 项目生成 3、KEIL端程序整合 1、简介 本文对HAL串口中断函数进行介绍。 2 基础配置 2.1.1 SYS配置 2.1.2 RCC配置 2.2 串口外设配置 2.3 项目生成 3、KEIL端程序整合 首先在main.c文件中进行…

【云原生】k8s中Contrainer 生命周期回调/策略/指针学习

个人主页&#xff1a;征服bug-CSDN博客 kubernetes专栏&#xff1a;kubernetes_征服bug的博客-CSDN博客 目录 1 容器生命周期 2 容器生命周期回调/事件/钩子 3 容器重启策略 4 自定义容器启动命令 5 容器探针 1 容器生命周期 Kubernetes 会跟踪 Pod 中每个容器的状态&am…

C++和Lua交互总结

C和Lua交互总结 Chapter1. C和Lua交互总结一、Lua与C的交互机制——Lua堆栈二、堆栈的操作三、C 调用 Lua1&#xff09;C获取Lua值2&#xff09;C调用Lua函数示例&#xff1a; 四、Lua 调用 C包装C函数 最后总结一下 Chapter1. C和Lua交互总结 原文链接&#xff1a;https://bl…

c++实现Qt对象树机制

文章目录 对象树是什么使用对象树的好处使用c实现对象树 对象树是什么 我们常常听到 QObject 会用对象树来组织管理自己&#xff0c;那什么是对象树&#xff1f;  这个概念非常好理解。因为 QObject 类就有一个私有变量 QList<QObject *>&#xff0c;专门存储这个类的子…

上海亚商投顾:沪指震荡微涨 金融、地产午后大幅走强

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 三大指数早盘震荡&#xff0c;午后集体拉升反弹&#xff0c;创业板指涨超1%。券商等大金融板块午后再度走强&#…

问题解决方案

前端开发 1、npm安装的时候老是卡住 reify:rxjs: timing reifyNode:node_modules/vue/cli/node_modules 查看当前使用的那个镜像 nrm lsnpm ---------- https://registry.npmjs.org/yarn --------- https://registry.yarnpkg.com/cnpm --------- https://r.cnpmjs.org/taobao …

力扣 343. 整数拆分

题目来源&#xff1a;https://leetcode.cn/problems/integer-break/description/ C题解1&#xff1a;动态规划。dp[i] 代表数字i拆分后得到的最大乘积。递归公式为拆分后两个数的最大乘积相乘&#xff0c;即 dp[i] max(dp[i], dp[j] * dp[i-j])。对于n2或3需要另外讨论。 cla…

Scratch 教程:如何实现文本分割

在平时&#xff0c;我们通常会有分割文本的要求&#xff0c;但扩展却又无法使用scratch离线版打开&#xff0c;咋办呢&#xff1f;我们可以用原版做出来&#xff01; 没关系&#xff0c;我来教你&#xff01; 我们自定义一个函数&#xff0c;之后要分割调用就行了 创建三个变量…