剑指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:…

Tool Documentation Enables Zero-Shot Tool-Usage with Large Language Models

本文是LLM系列文章的内容&#xff0c;针对《Tool Documentation Enables Zero-Shot Tool-Usage with Large Language Models》的翻译。 工具文档赋能大模型零样本的工具使用 摘要1 引言2 相关工作3 实验设置3.1 常规的工作流3.2 工具使用提示方法3.3 评估任务 4 实证研究结果4…

node debian 镜像 new Date 获取时间少 8 小时问题

问题 在 node debian 镜像中&#xff0c;用 (new Date()).getHours() 与系统时间&#xff08;东 8 区&#xff09;少了 8 小时 系统时间 $ node > (new Date()).getHours() 11容器中的时间 $ node > (new Date()).getHours() 3原 Dockerfile FROM node:20.5-bullsey…

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人员的…

【博客687】k8s informer的list-watch机制剖析

k8s informer的list-watch机制剖析 1、list-watch场景&#xff1a; client-go中的reflector模块首先会list apiserver获取某个资源的全量信息&#xff0c;然后根据list到的rv来watch资源的增量信息。希望使用client-go编写的控制器组件在与apiserver发生连接异常时&#xff0c…

【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;都会识别应用。 • 使用…

面试之快速学习c++11-函数模版的默认模版参数,可变模版,tuple

//学习地址&#xff1a; http://c.biancheng.net/view/3730.html 函数模版的默认模版参数 在 C98/03 标准中&#xff0c;类模板可以有默认的模板参数&#xff0c;如下&#xff1a; template <typename T, typename U int, U N 0> struct TestTemplateStruct {};但是…

CSS水平垂直居中

1.利用定位 margin:auto 2.flex布局 3.grid布局 一、利用positionmargin:auto <style>.outer {position: relative; /*父亲相对定位*/width: 200px;height: 200px;background-color: red;}.inner {position: absolute; /*儿子绝对定位*/top: 0;bottom: 0;left: 0;ri…

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电压比…

weaviate入门安装与部署

官方教程 weaviate Introduction 安装 参考weaviate/installation&#xff0c;weaviate的安装有三种方案&#xff1a; 在本地安装docker build拉取镜像安装买WCS的weaviate服务 实践中&#xff0c;为了加快部署速度&#xff0c;我们用docker build拉取了一个镜像安装&#…

浅析大数据时代下的视频技术发展趋势以及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…