首页 > 其他分享 >每日一题 --- 右旋字符串[卡码][Go]

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

时间:2024-04-01 23:59:32浏览次数:20  
标签:卡码 string fmt bytes Len --- Go 字符串 newBytes

右旋字符串

题目: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--
	}
}

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

标签:卡码,string,fmt,bytes,Len,---,Go,字符串,newBytes
From: https://blog.csdn.net/weixin_52025712/article/details/137250912

相关文章

  • Kubernetes kafka系列 | Strimzi 部署kafka-bridge
    Strimzi+kafka集群部署直通车一、kafkabridge介绍KafkaBridge是ApacheKafka生态系统中的一个工具或组件,用于实现Kafka与其他系统或协议之间的通信或集成。Kafka本身是一个分布式事件流平台,广泛用于构建实时数据流水线和流式应用程序。然而,并非所有系统或应用程......
  • 【书籍】Django项目实例精解(第2版) pdf 下载
    Django项目实例精解(第2版)pdf下载作者:安东尼奥·米勒ISBN:9787302526551文件格式:pdf目录第1章构建博客应用程序11.1安装Django11.1.1创建隔离的Python环境21.1.2利用pip安装Django31.2创建第一个项目31.2.1运行开发服务器51.2.2项目设置61.......
  • 【YOLOv5改进系列(11)】高效涨点----添加soft-nms(IoU,GIoU,DIoU,CIoU,EIoU,SIoU)到yol
    文章目录......
  • 【华为OD机试真题】A卷-优秀学员统计(JAVA)
    一、题目描述【华为OD机试真题】A卷-优秀学员统计(JAVA)题目描述:公司某部门软件教导团正在组织新员工每日打卡学习活动,他们开展这项学习活动已经一个月了,所以想统计下这个月优秀的打卡员工。每个员工会对应一个id,每天的打卡记录记录当天打卡员工的id集合,一共30天。请你实现......
  • 【华为OD机试真题】A卷-预定酒店(JAVA)
    一、题目描述【华为OD机试真题】A卷-预定酒店(JAVA)题目描述:放暑假了,小明决定到某旅游景点游玩,他在网上搜索到了各种价位的酒店(长度为n的数组A),他的心理价位是x元,请帮他筛选出k个最接近x元的酒店(n>=k>0),并由低到高打印酒店的价格二、输入输出输入描述:第一行:n,k,x......
  • c语言字符串逆序-基础知识
    c语言字符串逆序(1)错误输出(2)正确输出:方法1(3)正确输出:方法2......
  • 计算机组成与体系结构--2.6:总线系统,2.7:寻址方式,2.8:CISC与RISC
    转上一节:http://t.csdnimg.cn/3xoZahttp://t.csdnimg.cn/3xoZa2.6:总线系统按照连接对象分为:内总线(又称为系统总线,各功能部件之间的传输通路)和外总线(又称通信总线,是系统之间或是计算机主机与外围设备之间的传输通路)按照通信仿式分为:串行总线(数据按位依次传输)和并行......
  • 【论文解读】PA-Sketch: A Fast and Accurate Sketch for Differentiated Flow Estima
    论文链接:https://ieeexplore.ieee.org/abstract/document/10355581开源代码:无0.问题和关键见解问题:大多数已有的草图方法都忽略了流优先级之间的区别,尽管高优先级的流相对稀少,但却蕴含着重要信息。因此,最近出现了一系列优先级感知草图的工作,旨在为不同优先级的流提供不......
  • vant-weapp 提供的areaList城市数据的路径问题
    根据vant官网提供的引入方法会报错。通过add@vant/area-data会下载一份index.esm.mjs文件城市数据在项目中,我尝试了用各种路径来获取还是报错,最后只能将该index.esm.mjs文件复制到其他文件中,然后引入就可以了。 1.新建一个文件夹专门放数据的,然后在建个文件用来放这个......
  • Python自动化测试工具-selenium
    官网https://www.selenium.dev/测试环境搭建python3+selenium+chromeselenium安装:pipinstallseleniumchromedriver下载对应版本,放置在python安装目录下:http://chromedriver.storage.googleapis.com/index.html#coding=utf8fromseleniumimportwebdriverbr=......