当前位置: 首页 > news >正文

2026-05-08:反转字符串前缀。用go语言,给定字符串 s 和整数 k,把 s 的开头 k 个字符顺序完全倒过来(其余字符保持原样),输出新的字符串。 1 <= s.length <= 100。

2026-05-08:反转字符串前缀。用go语言,给定字符串 s 和整数 k,把 s 的开头 k 个字符顺序完全倒过来(其余字符保持原样),输出新的字符串。

1 <= s.length <= 100。

s 仅由小写英文字母组成。

1 <= k <= s.length。

输入: s = “abcd”, k = 2。

输出: “bacd”。

解释:

前 k = 2 个字符 “ab” 反转为 “ba”。最终得到的结果字符串为 “bacd”。

题目来自力扣3794。

执行过程详细描述

步骤1:接收输入参数

程序接收到两个关键输入:

  • 待处理的原始字符串:abcd(由4个小写英文字母组成)
  • 需要反转的前缀长度:2(表示只反转字符串最开头的2个字符)

步骤2:字符串转换为可修改的字节切片

Go语言中的字符串是不可变类型,无法直接修改字符顺序,因此需要将字符串转换为字节切片

  • 原始字符串abcd转换后得到字节切片:['a', 'b', 'c', 'd']
  • 转换的目的:只有字节切片支持直接交换元素位置,才能实现字符反转

步骤3:校验并确定反转的边界

  1. 计算字节切片的总长度:长度为4
  2. 校验输入的k值:题目规定1<=k<=字符串长度,这里k=2小于4,无需调整
  3. 确定反转区间:需要反转索引0到索引1的字符(前k个字符,索引从0开始计数,结束位置为k-1)

步骤4:双指针法反转指定区间的字符

使用左指针右指针相向移动,交换指针指向的字符,直到两指针相遇:

  1. 初始化指针:左指针l指向起始位置0(字符a),右指针r指向结束位置1(字符b
  2. 第一次交换:交换l=0r=1的字符,字节切片变为['b', 'a', 'c', 'd']
  3. 指针移动:左指针l加1变为1,右指针r减1变为0
  4. 终止判断:此时l >= r,反转操作结束,无需继续交换

步骤5:保留剩余字符的原始顺序

反转完成后,索引2、3位置的字符cd全程没有被修改,保持原始顺序不变。
最终的字节切片为:['b', 'a', 'c', 'd']

步骤6:字节切片转换回字符串

将处理完成的字节切片重新转换为Go语言字符串格式,得到最终结果:bacd

步骤7:输出结果

程序将最终的字符串bacd打印输出,完成整个处理流程。


时间复杂度与额外空间复杂度分析

1. 时间复杂度

时间复杂度为O(k)(k是需要反转的前缀长度):

  • 核心操作是双指针交换字符,只需要遍历前k个字符,交换次数为k/2次;
  • 剩余的字符无需任何操作,整体执行次数和k成正比,与字符串总长度n无关。
  • 简化表示:也可写为O(n)(n为字符串总长度),因为k≤n,是等价的复杂度量级。

2. 额外空间复杂度

额外空间复杂度为O(n)(n为字符串总长度):

  • 程序额外创建了一个和原字符串长度相同的字节切片,用于存储和修改字符;
  • 除了这个字节切片外,只使用了常数个指针变量(l、r、n等),没有占用其他额外空间;
  • 额外空间大小与输入字符串的长度成正比。

总结

  1. 执行核心:转字节切片→双指针反转前k个字符→转回字符串,剩余字符保持不变;
  2. 时间复杂度:O(k)(最优情况,仅遍历需要反转的部分);
  3. 额外空间复杂度:O(n)(因字符串不可变,必须开辟新切片存储)。

Go完整代码如下:

packagemainimport("fmt")funcreversePrefix(sstring,kint)string{// 将字符串转换为字节切片以便交换bytes:=[]byte(s)n:=len(bytes)// 确保 k 不超过字符串长度ifk>n{k=n}// 反转从 0 到 k-1 的字符forl,r:=0,k-1;l<r;l,r=l+1,r-1{bytes[l],bytes[r]=bytes[r],bytes[l]}returnstring(bytes)}funcmain(){s:="abcd"k:=2result:=reversePrefix(s,k)fmt.Println(result)}

Python完整代码如下:

# -*-coding:utf-8-*-defreversePrefix(s:str,k:int)->str:# 将字符串转换为列表以便交换chars=list(s)n=len(chars)# 确保 k 不超过字符串长度ifk>n:k=n# 反转从 0 到 k-1 的字符left,right=0,k-1whileleft<right:chars[left],chars[right]=chars[right],chars[left]left+=1right-=1return''.join(chars)if__name__=="__main__":s="abcd"k=2result=reversePrefix(s,k)print(result)

C++完整代码如下:

#include<iostream>#include<string>#include<algorithm>usingnamespacestd;stringreversePrefix(string s,intk){// 确保 k 不超过字符串长度intn=s.length();if(k>n){k=n;}// 反转从 0 到 k-1 的字符for(intl=0,r=k-1;l<r;l++,r--){swap(s[l],s[r]);}returns;}intmain(){string s="abcd";intk=2;string result=reversePrefix(s,k);cout<<result<<endl;return0;}

http://www.jsqmd.com/news/775155/

相关文章:

  • AD16仿真模型引脚对不上?一个案例讲透原理图与SPICE模型的映射关系(以运放LF411CN为例)
  • 2026年4月行业内做得好的风水缸设计厂商推荐,风水缸/故宫铜缸/铜水缸/铜缸/铜大缸/门海铜缸,风水缸企业哪家好 - 品牌推荐师
  • 游戏服务器容器化部署:基于Docker的Archon镜像实战指南
  • DownKyi哔哩下载姬:专业级B站视频下载解决方案完全指南
  • 2026年靠谱的线束定制技术团队有哪些 - 工业品牌热点
  • 开发手记:关于JSON格式化工具的隐私安全问题
  • 从理论到实践:西瓜书机器学习代码实战深度指南
  • 豆包收费引发行业震荡:从技术视角看,为什么通用大模型搞不定严肃招投标?
  • Rime小狼毫的隐藏玩法:除了打字,还能用‘/’键快速输入符号、网址和颜文字
  • 2026年4月服务好的蓬莱酒店预定方式,蓬莱酒店/长岛民宿/特色民宿/高端民宿/军人优惠酒店/蓬莱民宿,蓬莱酒店首选 - 品牌推荐师
  • 2025最权威的十大AI辅助论文网站横评
  • 打造高效开发环境:VSCode配置黄金标准与团队实践指南
  • 2026年企业IT监控平台选型指南:四大主流方案深度对比
  • Go语言的接口介绍
  • OpenSoul开源框架:构建拥有持久记忆与人格的AI角色
  • #计算机毕设论文写到崩溃?AI自动生成万字初稿实测:从大纲到参考文献全流程解析(附查重降重技巧)
  • 使用 Python 通过 Taotoken 稳定调用多种大模型 API
  • Cursor AI液态玻璃主题:打造未来感代码编辑器的视觉美学与实战配置
  • SITS2026内部白皮书首度流出:AISMM驱动变革的12项组织适配指标(含权重算法与阈值红线)
  • 如何轻松解决3个《神界原罪》与《博德之门3》MOD制作核心难题:LSLib完全指南
  • 使用psql执行带变量的sql脚本
  • Product Hunt 2025-10-03 每日热榜背后:技术架构深度剖析
  • SkeyeVSS开发FAQ:国标视频流媒体转码与多码率自适应
  • 为什么现在的电商API,正在从“搬运工”变成“决策者”?
  • 保障高并发业务稳定,浅谈大模型API的容灾与路由策略
  • PaperClaw:基于Rust的高效Git仓库历史分析命令行工具
  • 【开源项目】EasyTier — 轻量级去中心化 SD-WAN 新范式
  • 关于tuna mini midi官方编辑器键盘无法连接问题的解决
  • cad输出PDF时画的内容消失内容是空的PDF打印不全只占A4纸的一部分
  • Acrobat Distiller 无法创建临时文件夹 错误183