代码随想录-字符串 | 右旋字符串

代码随想录-字符串 | 7右旋字符串

  • 卡码网 右旋字符串
    • 解题思路
    • 代码
    • 复杂度
    • 难点
    • 总结

卡码网 右旋字符串

题目链接

题目描述

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

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

解题思路

判断

  • 我的思路:采用辅助变量,分别存储前一段和后一段的字符,再拼接。(但这样需要开辟额外空间,不是好解法)
  • 整体反转+局部反转:先整体反转整个字符串,再局部分别反转前一段和后一段的字符串。(这个方法也太聪明了!)

代码

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

复杂度

  • 时间复杂度
    O(n)
  • 空间复杂度
    O(1)

难点

  • 异或反转字符串的思想:
public void reverseString(char[] s) {int l = 0;int r = s.length - 1;while (l < r) {s[l] ^= s[r];  //构造 a ^ b 的结果,并放在 a 中s[r] ^= s[l];  //将 a ^ b 这一结果再 ^ b ,存入b中,此时 b = a, a = a ^ bs[l] ^= s[r];  //a ^ b 的结果再 ^ a ,存入 a 中,此时 b = a, a = b 完成交换l++;r--;}}

总结

学习到新知识:异或反转字符串(通过位运算)。

反转字符串时也可以采用常见的数值交换方法:

int tmp = s[i];
s[i] = s[j];
s[j] = tmp;

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

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

相关文章

Wireshark数据包分析入门

Wireshark数据包分析 1. 网络协议基础1.1. 应传网数物&#xff08;应表会传网数物&#xff09; 2. 三次握手2.1. 第一次握手2.2. 第二次握手2.3. 第三次握手2.4. 三次握手后流量特征 3. 第一层---物理层&#xff08;以太网&#xff09;4. 第二层---数据链路层&#xff08;PPP L…

ele pls 表格行内样式超出隐藏

使用 模板实现方案&#xff1a; 实现效果&#xff1a; 相关样式&#xff1a;

【网络技术】【Kali Linux】Wireshark嗅探(十)IPv4和IPv6

往期 Kali Linux 上的 Wireshark 嗅探实验见博客&#xff1a; 【网络技术】【Kali Linux】Wireshark嗅探&#xff08;一&#xff09;ping 和 ICMP 【网络技术】【Kali Linux】Wireshark嗅探&#xff08;二&#xff09;TCP 协议 【网络技术】【Kali Linux】Wireshark嗅探&…

Jenkins CI/CD 持续集成专题四 Jenkins服务器IP更换

一、查看brew 的 services brew services list 二、编辑 homebrew.mxcl.jenkins-lts.plist 将下面的httpListenAddress值修改为自己的ip 服务器&#xff0c;这里我是用的本机的ip 三 、重新启动 jenkins-lts brew services restart jenkins-lts 四 浏览器访问 http://10.85…

Python技术:从入门到精通的指南

Python&#xff0c;作为一种高级编程语言&#xff0c;因其简洁的语法和强大的功能而广受开发者喜爱。它不仅适用于初学者快速上手&#xff0c;也能满足专业开发者的复杂需求。 Python语言的特点 简洁易读 Python的语法接近英语&#xff0c;易于编写和阅读&#xff0c;是初学者…

小米金融警示非法集资风险 助力消费者守护“钱袋子”

随着公安机关对电信网络诈骗打击力度的持续加大&#xff0c;不法分子的诈骗手段也在不断翻新&#xff0c;其隐蔽性和欺骗性日益增强。根据《2022年度反诈报告》数据显示&#xff0c;投资理财类诈骗已成为当前黑灰产活动的主要类型之一&#xff0c;给广大金融消费者带来了严重的…

孩子如何才能学好python

Python是一种高级编程语言&#xff0c;因为其简单易学、功能强大和易于阅读的语法&#xff0c;已经成为了最受欢迎的编程语言之一。对于孩子来说&#xff0c;学习Python不仅可以提高他们的计算机技能&#xff0c;还可以为他们未来的职业生涯打下基础。下面是一些学习Python的建…

python 常用库

python 常用库 以下是对每个包的作用的简要解释&#xff1a; absl-py&#xff1a;是 Abseil Python 库&#xff0c;提供了一些实用的工具和功能。accelerate&#xff1a;用于加速数据处理。addict&#xff1a;用于操作嵌套字典。aiofiles&#xff1a;支持异步文件操作。aiohtt…

redis7安装与配置

一、下载 通过 redis官网 或者 redis中文网 下载。 以下是 redis 相关文档资料链接&#xff1a; redis源码地址 redis在线测试 redis命令参考 redis中文文档 历史发布版本的源码地址 二、版本命名规则 Redis从发布到现在&#xff0c;已经有十余年的时光了&#xff0c;…

Redis 大KEY/慢查询问题的排查和解决

1.排查大KEY/慢查询问题 &#xff08;1&#xff09;设置慢查询参数 slowlog-log-slower-than 10000 --设置慢查询的时间阀值&#xff0c;单位微秒 slowlog-max-len 128 --设置慢查询FIFO队列的长度 &#xff08;2&#xff09;模拟大KEY public class Re…

云原生Service Mesh服务网格简单介绍

serviceMesh是什么 Service Mesh是一个用于处理服务间通信的基础设施层&#xff0c;旨在实现云原生应用复杂服务拓扑中的可靠请求传递。其基本构成是一组与应用一起部署的轻量级网络代理&#xff0c;这些代理对应用来说是透明的。Service Mesh通过统一的方式来控制和处理服务间…

C++期末考试注意点2

函数重载和虚函数处理&#xff1a;函数重载处理的是同一层次上的同名函数问题。虚函数处理的是不同派生层次上的同名函数问题。同一类族的虚函数的首部是相同的&#xff0c;而函数重载时函数的首部是不同的(参数个数或类型不同)。虚函数&#xff1a; (1)只能用virtual声明类的…

双筒水封式防爆器使用方法要记好

双筒水封式防爆器使用方法要记好 型号&#xff08;YC-STFB型&#xff09; 双筒水封式防爆器属于双罐结构的水封式防爆器&#xff0c;安装在抽放瓦斯泵吸气侧和排气端的 管路上靠防爆器底部的水封保护井上井下、抽放泵站设备及用户按全&#xff1b;当瓦斯抽放时气体经由 进气…

【深度学习实战(24)】如何实现“断点续训”?

一、什么是断点续训&#xff1a; 中断的地方&#xff0c;继续训练。与加载预训练权重有什么区别呢&#xff1f;区别在于优化器参数和学习率变了。 二、如何实现“断点续训” 我们需要使用checkpoint方法保存&#xff0c;模型权重&#xff0c;优化器权重&#xff0c;训练轮数…

【Redis】Spring Boot应用中的Redis分布式锁示例

前言 Spring Boot应用中&#xff0c;使用Redisson框架实现一个分布式锁的详细示例&#xff0c;其中获取锁超时时间为30秒&#xff0c;锁失效时间为20秒。 引入依赖 首先&#xff0c;确保你的Spring Boot应用中包含了Redisson的依赖&#xff0c;你可以在pom.xml中添加如下依赖&…

旅游景区一体化污水处理设备产品特点

诸城市鑫淼环保小编带大家了解一下旅游景区一体化污水处理设备产品特点 产品特点 1、埋设于地表以下&#xff0c;设备上面的地表可作为绿化或其他用地&#xff0c;不需要建房及采暖、保温。 2、二级生物接触氧化处理工艺均采用推流式生物接触氧化&#xff0c;其处理效果优于完全…

游戏自动脚本挂机可行性分析

随着科技的不断发展,自动化和智能化技术逐渐渗透到我们生活的各个方面。在游戏领域,自动脚本挂机技术也应运而生,为玩家提供了一种全新的游戏方式。那么,游戏自动脚本挂机到底可行吗?本文将从多个角度进行深入分析。 一、游戏自动脚本挂机的定义与功能 游戏自动脚本挂机…

100.qt qml-MultiPointTouchArea多点触摸缩放拖拽

介绍 MultiPointTouchArea是一个不可见的项目,用于跟踪多个触摸点,它的父类是Item,所以我们可以通过enabled来设置触摸是启用还是禁用。 它提供了一个mouseEnabled属性,该属性默认为true,也就是说也会处理鼠标事件,鼠标事件其实就是当个触摸点,如果设置为false,则只会处理多…

Oracle删除数据库的步骤【谨慎操作】

在创建数据库的时候,有创建就会有删除,删除数据库的工作需要很多必要的条件 删除数据库会把所有库的数据文件、控制文件、日志文件等物理文件通通给删除掉!!!! 这时候你就可以跑路了。。。。。 1、模拟测试,创建一个测试库 -- 创建临时表空间 [root@cdp1 sql]#cat /d…

韩国机器人公司Rainbow Robotics推出RB-Y1轮式双臂机器人

文 | BFT机器人 近日&#xff0c;韩国机器人领域的佼佼者Rainbow Robotics揭开了RB-Y1移动机器人的神秘面纱&#xff0c;这款机器人以其创新的设计和卓越的功能引起了业界的广泛关注。与此同时&#xff0c;Rainbow Robotics还携手舍弗勒集团&#xff08;提供汽车、工业技术服务…