Leetcode541反转字符串Ⅱ(java实现)

我们今天分享的题目是字符串反转的进阶版反转字符串Ⅱ。
我们首先来看题目描述:
在这里插入图片描述
乍一看题目,有种懵逼的感觉,不要慌,博主来带着你分析题目,题目要求:

1. 每隔2k个字符,就对2k字符中的前k个字符进行反转;
2. 如果遍历2k后剩余的字符少于了k,就对剩余字符进行反转;
3. 如果剩余字符小于2k但大于等于k个,则反转前k个字符。

具体是什么意思么,我们来举例说明。
假如我们的字符串为“abcdefgh”k为32*k=6,此时的元素是f,那么我们应该对对2k的前k个字符进行反转,也就是对前3个元素“abc”反转,反转后为“cbadefgh”,此时我们遍历2k后剩余的字符小于了k(剩余gh,k为3),我们对剩余的字符反转,最后就为"cbadefhg"
要求3实际上和要求1做的是同一个事情,就是对前k个字符反转
我们来说下我们代码的实现大致思路:
首先,我们对字符串进行遍历,每次以2*k为遍历段,也就是一次循环遍历2*k个元素,如果说遍历2k后的字符串大于等于2k那么对i到i+k的字符串进行反转,如果遍历2k后字符串小于了2k那么对剩余的字符串进行反转。
具体的代码实现如下(本道题对边界的处理原则是左闭右开):

class Solution {
    /**
     * Leetcode541反转字符Ⅱ
     */
    //字符反转
    void restr(char[] chars,int i,int k){
      while (i<k){
       char tem;
       tem=chars[i];
       chars[i]=chars[k];
       chars[k]=tem;
       i++;
       k--;
      }
   }
    public  String reverseStr(String s, int k) {
        int i =0;
        char[] chars = s.toCharArray();
        //每次遍历2*k个元素
        for (i=0;i<chars.length;i+=2*k){
            //要求1和要求3其实是一样的对前k个字符进行反转,那么我们只需要
            //判断不要让i+k出现越界
            if (i+k<s.length()){
                //反转前k个字符
                restr(chars,i,i+k-1);
            }else {
                //反转剩余的字符
                restr(chars,i,chars.length-1);
            }
        }
        return new String(chars);
    }
}

那么本次的题目分享就到这里结束了,如果对本道题有疑问欢迎在博客下方留言,如果觉得博主写的博客对你有帮助,麻烦给博主点个小爱心谢谢。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SVN安装使用

​ 1.下载 TortoiseSVN-1.14.6.29673-x64-svn-1.14.3.msi 2.安装 ​ ​ ​ 可以修改安装目录 ​ 修改命令行工具&#xff0c;否则idea无法配置svn可执行文件 ​ ​ ​ ​ ​ ​ ​ 可以选择no&#xff0c;先不重启电脑 3.拉取代码 ​ ​ 4.Idea配置svn ​…

代码随想录算法训练营day4 | 链表(2)

一、LeetCode 24 两两交换链表中的节点 题目链接&#xff1a;24.两两交换链表中的节点https://leetcode.cn/problems/swap-nodes-in-pairs/ 思路&#xff1a;设置快慢指针&#xff0c;暂存节点逐对进行交换。 代码优化前&#xff1a; /*** Definition for singly-linked list…

435. 无重叠区间 - 力扣(LeetCode)

题目描述 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 。 题目示例 输入: intervals [[1,2],[2,3],[3,4],[1,3]] 输出: 1 解释: 移除 [1,3] 后&#xff0c;剩下的区间没有重…

Django模型(一)

一、介绍 模型,就是python中的类对应数据库中的表 1.1、ORM ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写 ORM 把数据库映射成对象 1.2、示例 1.2.1、模型 from django.db import models…

海康实时监控预览视频流接入web

我们采取的方案是后端获取视频流返回给前端&#xff0c;然后前端播放 海康开放平台海康威视合作生态致力打造一个能力开放体系、两个生态圈&#xff0c;Hikvision AI Cloud开放平台是能力开放体系的核心内容。它是海康威视基于多年在视频及物联网核心技术积累之上&#xff0c;…

我们应该怎样定义 BTC Layer2?

撰文&#xff1a;Jademont&#xff0c;水滴资本创始人 原文来自Techub News&#xff1a;我们应该怎样定义 BTC Layer2&#xff1f; 广义的 BTC Layer2&#xff1a; 只要消耗 BTC 作为 gas&#xff0c;以 BTC 为底层资产&#xff0c;可以做为 dapp 平台&#xff0c;性能又远优…

【2024】Docker部署Redis

1.说明&#xff1a; 因为容器实例的运行是有生命周期的&#xff0c;一些redis的备份、日志和配置文件什么的最好还是放在服务器本地。这样当容器删除时&#xff0c;我们也可以保留备份和日志文件。所以先在本地服务器安装redis并配置文件设置。下面是安装步骤: 2.安装步骤 1…

人脸识别 FaceNet人脸识别(一种人脸识别与聚类的统一嵌入表示)

人脸识别 FaceNet人脸识别&#xff08;一种人脸识别与聚类的统一嵌入表示&#xff09; FaceNet的简介Facenet的实现思路训练部分 FaceNet的简介 Facenet的实现思路 import torch.nn as nndef conv_bn(inp, oup, stride 1):return nn.Sequential(nn.Conv2d(inp, oup, 3, stride…

什么是RBAC

什么是RBAC 概述&#xff1a;RBAC&#xff1a;Role-Based Access Control详解&#xff1a;什么是基于⻆⾊的访问控制具体实现&#xff1a;如何设计RABC模型其他介绍&#xff1a;RBAC支持三个著名的安全原则 概述&#xff1a;RBAC&#xff1a;Role-Based Access Control RBAC&a…

【网站项目】基于SSM的228图书商城网站

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

数据监控-Prometheus/Grafana

一、数据监控Prometheus 1、什么是Prometheus Prometheus是由SoundCloud开源监控告警解决方案,从2012年开始编写代码,到2015年github上开源以来,吸引不少用户以及公司的使用。Prometheus作为新一代的开源解决方案,很多理念与Google SRE的运维之道不谋而合。 2、Promet…

YOLO自制数据集及训练

使用 Make Sense 网站进行标注 https://www.makesense.ai/可以让AI帮你先标一下 一定要点一下 + ,不然不会加进去 导出标签

【第五天】蓝桥杯备战

1、金币 https://www.lanqiao.cn/problems/357/learning/ 解法&#xff1a;暴力 import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);//在此输入…

蓝牙----蓝牙GAP层

蓝牙协议栈----GAP GAP的角色连接过程连接参数 GAP&#xff1a;通用访问配置协议层 gap的角色发现的模式与过程连接模式与过程安全模式与过程 CC2640R2F的GAP层抽象 GAP的角色 Broadcaster 广播电台 -不可连接的广播者。Observer 观察者 -扫描广播者但无法启动连接。Periphe…

SpringBoot系列之JPA实现按年月日查询

SpringBoot系列之JPA实现按年月日查询 通过例子的方式介绍Springboot集成Spring Data JPA的方法&#xff0c;进行实验&#xff0c;要先创建一个Initializer工程&#xff0c;如图&#xff1a; 选择&#xff0c;需要的jdk版本&#xff0c;maven项目 选择需要的maven配置&#x…

了解维特比算法:通信系统和自然语言处理中解码的基石

一、介绍 在数字通信和信号处理领域&#xff0c;维特比算法是一种革命性的纠错和解码方法。该算法以 1967 年推出的 Andrew Viterbi 的名字命名&#xff0c;已成为数字通信和自然语言处理领域的基础。本文旨在深入研究维特比算法的复杂性&#xff0c;探讨其理论基础、实际应用以…

【JavaEE进阶】 数据库连接池与MySQL企业开发规范

文章目录 🌴数据库连接池🎋数据库连接池的使用🎄MySQL企业开发规范⭕总结🌴数据库连接池 数据库连接池负责分配、管理和释放数据库连接,它允许应⽤程序重复使⽤⼀个现有的数据库连接,⽽不是再重新建⽴⼀个. 没有使⽤数据库连接池的情况:每次执⾏SQL语句,要先创建⼀…

数据库 sql select *from account where name=‘张三‘ 执行过程

select *from account where name张三分析上面语句的执行过程 用到了索引 由于是根据 1.name字段进行查询&#xff0c;所以先根据name张三’到name字段的二级索引中进行匹配查 找。但是在二级索引中只能查找到 Arm 对应的主键值 10。 2.由于查询返回的数据是*&#xff0c…

排序(1)——直接插入排序、希尔排序

目录 一、直接插入排序 1.简介 2.思路与代码 3.复杂度与稳定性分析 &#xff08;1&#xff09;时间复杂度 &#xff08;2&#xff09;空间复杂度 &#xff08;3&#xff09;稳定性 二、希尔排序 1.简介 2.思路与代码 &#xff08;1&#xff09;分组排序 &#xff08…

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-帖子管理实现

锋哥原创的SpringbootLayui python222网站实战&#xff1a; python222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火…