每日一题 --- 右旋字符串[卡码][Go]

news2024/11/26 2:52:57

右旋字符串

题目:55. 右旋字符串(第八期模拟笔试) (kamacoder.com)

题目描述

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

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

输入描述

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

输出描述

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

输入示例
2
abcdefg
输出示例
fgabcde
提示信息

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

方法一:

先对字符数组进行扩容,然后利用双指针将前面的值付给后面,再在后面取多余的数赋值到前面。

package main

import "fmt"

func main() {
    var s string
    var k int
    
    fmt.Scan(&k)
    fmt.Scan(&s)
    fmt.Println(rightHandSideN(s,k))
}

func rightHandSideN(s string, k int) string {
	bytes := []byte(s)
	Len := len(bytes)
	exPlace := k % Len
	newBytes := make([]byte, Len+exPlace)
	r := len(newBytes) - 1
	l := Len - 1
	for l >= 0 {
		newBytes[r] = bytes[l]
		r--
		l--
	}
	l = 0
	r = Len
	for exPlace != 0 {
		newBytes[l] = newBytes[r]
		l++
		r++
		exPlace--
	}
	return string(newBytes[:Len])
}

时间复杂度O(n),空间复杂度因为创建一个新字节数组所以为O(n)。

不用额外空间行不行呢,答案是可以的,就是反转再反转。

方法二:

利用反转,先将两个局部反转,在将整体反转。

package main

import "fmt"

func main() {
    var s string
    var k int
    
    fmt.Scan(&k)
    fmt.Scan(&s)
    fmt.Println(rightHandSideN(s,k))
}

func rightHandSideN(s string, k int) string {
	bytes := []byte(s)
	Len := len(bytes)
	idx := Len - k%Len
	reverseRightHandSideN(bytes[:idx])
	reverseRightHandSideN(bytes[idx:])
	reverseRightHandSideN(bytes)
	return string(bytes)
}

func reverseRightHandSideN(bytes []byte) {
	l, r := 0, len(bytes)-1
	for l < r {
		bytes[l], bytes[r] = bytes[r], bytes[l]
		l++
		r--
	}
}

当然你也可以先整体反转,再局部反转。快去试试吧。
在这里插入图片描述

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

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

相关文章

书生浦语第一次课

模型的发展 从专业模型到通用模型 书生浦语大模型全链路开源体系 2023.06.07 -> InternLM千亿参数语言大模型发布 2023.07.06 -> InternLM千亿参数语言大模型全面升级&#xff0c;支持8K语境、26种语言。全面开源、免费商用&#xff1a;InternLM-7B、全链条开源工具…

【内存泄漏】数据库连接connectionPhantomRefs内存过大

1. 问题背景 线上出现内存报警&#xff0c;内存增长曲线如下 dump内存文件&#xff0c;临时重新发布服务。后经排查发现是数据库连接池设置不合理以及mysql-connector-java 5.1.49有内存泄漏bug。以下为对此问题的分析及问题总结。 1.1 应用背景 数据库连接池&#xff1a; …

赛奥分离技术现已加入2024第13届生物发酵展

参展企业介绍 上海赛奥分离技术工程有限公司成立于2010年,是上海市高新技术企业、上海市专精特新企业&#xff0c;宝山区工程及技术中心。公司着重于在流体分离净化领域&#xff0c;研究开发制造膜技术领域中错流微滤、超滤系统、纳滤系统、反渗透、精细过滤等膜分离设备及适用…

光伏无人机:绿色能源与航空技术的融合创新

在可再生能源和无人机技术快速发展的背景下&#xff0c;光伏无人机作为一种新兴的绿色航空器&#xff0c;正逐渐展现出其独特的优势和广阔的应用前景。本文将深入探讨光伏无人机的原理、优势以及其在多个领域的应用&#xff0c;展望其未来的发展趋势。 一、光伏无人机的原理 光…

【LeetCode】热题100 刷题笔记

文章目录 T1 两数之和T49 字母异位词分组常用小技巧 T1 两数之和 链接&#xff1a;1. 两数之和 题目&#xff1a; 【刷题感悟】这道题用两层for循环也能做出来&#xff0c;但我们还是要挑战一下时间复杂度小于 O ( n 2 ) O(n^2) O(n2)的解法&#xff0c;不能因为它是第一道 …

SAP Fiori开发中的JavaScript基础知识6 - 数组(Arrays)

1 背景 在本篇博客中&#xff0c;我将介绍JavaScript中数组&#xff08;Arrays&#xff09;的概念和用法。 2 数组 在JavaScript中&#xff0c;数组是一种特殊的对象&#xff0c;用于存储多个值在单个变量中。 2.1 创建数组 在JavaScript中&#xff0c;创建数组有以下有2种…

鸿蒙OS元服务开发说明:【WebGL网页图形库开发接口】

一、场景介绍 WebGL主要帮助开发者在前端开发中完成图形图像的相关处理&#xff0c;比如绘制彩色图形等。目前该功能仅支持使用兼容JS的类Web开发范式开发。 二、接口说明 表1 WebGL主要接口列表 鸿蒙OS开发更多内容↓点击HarmonyOS与OpenHarmony技术鸿蒙技术文档开发知识更…

反弹shell的方法和场景

Netcat反弹Shell 1 NC正向反弹shell Netcat简称NC,是一个简单、可靠的网络工具,被誉为网络界的瑞士军刀。通NC可以进行端口扫描、 反弹Shell、端口监听和文件传输等操作,常用参数如下&#xff1a; -c指定连接后要执行的shell命令-e指定连接后要执行的文件名-k配置 Socket一…

制造业工厂怎么通过MES系统来升级改造车间管理

在当今高度竞争的市场环境下&#xff0c;制造业企业需要不断提高生产效率&#xff0c;以在激烈的竞争中立于不败之地。而一种被广泛应用的方法就是利用MES控制系统&#xff0c;通过数字化管理和自动化控制来改造生产车间提升生产效率。 1、MES管理系统能够实现对生产过程的全面…

Linux环境基础和工具的使用

目录 1、Linux软件包管理器---yum 2、Linux开发工具 2.1、vim基本概念 2.2 vim基本操作 2.3 vim正常模式命令集 2.4 vim末行模式命令集 2.5 简单vim配置 2.5.1 配置文件的位置 3 Linux编译器--gcc/g的使用 3.1 背景知识 3.2 gcc完成 4 Linux调试器--gdb使用 4.1 背…

网页的血液——javascript

JavaScript 基础知识概述 1. JavaScript 介绍 JavaScript 是一种高级的、解释型的编程语言&#xff0c;它是一种基于对象的、事件驱动的语言&#xff0c;它允许开发者创建动态的网页。JavaScript 是一种脚本语言&#xff0c;它可以嵌入到 HTML 中&#xff0c;或者作为外部文件…

一篇商业稿件值千元,我的过稿经验大公开

撰写过上百篇企业和品牌稿件&#xff0c;甚至一篇商业稿件可值千元&#xff0c;可能很多人还不太相信&#xff0c;事实就是真的会有很多的企业和品牌愿意为此买单&#xff0c;是因为稿件带来的价值也是无法衡量的&#xff0c;直接给产品或是品牌带来更多的曝光甚至转化。今天伯…

一种新的基于STT-MRAM的时域内存计算单元

大数据、物联网和人工智能等技术的进步揭示了传统冯诺依曼的瓶颈架构&#xff0c;导致高能耗和有限的内存带宽。内存计算&#xff08;IMC通过直接在内存中进行计算&#xff0c;提高了能效&#xff0c;提供了一个有前景的解决方案计算。现有的基于时域&#xff08;TD&#xff09…

vue+elementUI搭建动态表头的表格

前提&#xff1a;以下代码是vue2项目结合elementUi完成的 数据结构 后端传来的数据是两个list&#xff0c;一个表头的list&#xff0c;一个表格内容的list // 表头 headTableAtts: [{ columnLabel: 姓名, columnName: name },{ columnLabel: 年龄, columnName: age },{ colu…

算法学习——LeetCode力扣动态规划篇4(377. 组合总和 Ⅳ、322. 零钱兑换、279. 完全平方数、139. 单词拆分)

算法学习——LeetCode力扣动态规划篇4 377. 组合总和 Ⅳ 377. 组合总和 Ⅳ - 力扣&#xff08;LeetCode&#xff09; 描述 给你一个由 不同 整数组成的数组 nums &#xff0c;和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。 题目数据保…

苹果手机系统文件浏览技巧:实现高效的文件查找与管理

​ 目录 引言 用户登录工具和连接设备 查看设备信息&#xff0c;电池信息 查看硬盘信息 硬件信息 查看 基带信息 销售信息 电脑可对手机应用程序批量操作 运行APP和查看APP日志 IPA包安装测试 注意事项 引言 苹果手机与安卓手机不同&#xff0c;无法直接访问系统文件…

linux shell命令(进程管理、用户管理)

一、进程的概念 主要有两点&#xff1a; 1.进程是一个实体。每一个进程都有它自己的地址空间&#xff0c;一般情况下&#xff0c;包括文本区域&#xff08;text region&#xff09;、数据区域&#xff08;data region&#xff09;和堆栈&#xff08;stack region&#xff09;…

浅显易懂的简单说一下jvm内存模型

说起JVM大家都知道&#xff0c;它是运行java代码的基础。那么关于JVM 内存模型是不是很模糊 我用通俗易懂的方式说一下 我们这里先介绍 JVM 堆内存 它有两大块 包括 新生代内存&#xff0c;和老年代内存 。 为啥分为这两块&#xff0c; 你可以这样理解&#xff0c;&#xff…

【图论】【拓扑排序】1857. 有向图中最大颜色值

本文涉及的知识点 图论 拓扑排序 LeetCode1857. 有向图中最大颜色值 给你一个 有向图 &#xff0c;它含有 n 个节点和 m 条边。节点编号从 0 到 n - 1 。 给你一个字符串 colors &#xff0c;其中 colors[i] 是小写英文字母&#xff0c;表示图中第 i 个节点的 颜色 &#xf…