,输出新的字符串。 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校验并确定反转的边界计算字节切片的总长度长度为4校验输入的k值题目规定1k字符串长度这里k2小于4无需调整确定反转区间需要反转索引0到索引1的字符前k个字符索引从0开始计数结束位置为k-1步骤4双指针法反转指定区间的字符使用左指针和右指针相向移动交换指针指向的字符直到两指针相遇初始化指针左指针l指向起始位置0字符a右指针r指向结束位置1字符b第一次交换交换l0和r1的字符字节切片变为[b, a, c, d]指针移动左指针l加1变为1右指针r减1变为0终止判断此时l r反转操作结束无需继续交换步骤5保留剩余字符的原始顺序反转完成后索引2、3位置的字符c、d全程没有被修改保持原始顺序不变。最终的字节切片为[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等没有占用其他额外空间额外空间大小与输入字符串的长度成正比。总结执行核心转字节切片→双指针反转前k个字符→转回字符串剩余字符保持不变时间复杂度O(k)最优情况仅遍历需要反转的部分额外空间复杂度O(n)因字符串不可变必须开辟新切片存储。Go完整代码如下packagemainimport(fmt)funcreversePrefix(sstring,kint)string{// 将字符串转换为字节切片以便交换bytes:[]byte(s)n:len(bytes)// 确保 k 不超过字符串长度ifkn{kn}// 反转从 0 到 k-1 的字符forl,r:0,k-1;lr;l,rl1,r-1{bytes[l],bytes[r]bytes[r],bytes[l]}returnstring(bytes)}funcmain(){s:abcdk:2result:reversePrefix(s,k)fmt.Println(result)}Python完整代码如下# -*-coding:utf-8-*-defreversePrefix(s:str,k:int)-str:# 将字符串转换为列表以便交换charslist(s)nlen(chars)# 确保 k 不超过字符串长度ifkn:kn# 反转从 0 到 k-1 的字符left,right0,k-1whileleftright:chars[left],chars[right]chars[right],chars[left]left1right-1return.join(chars)if__name____main__:sabcdk2resultreversePrefix(s,k)print(result)C完整代码如下#includeiostream#includestring#includealgorithmusingnamespacestd;stringreversePrefix(string s,intk){// 确保 k 不超过字符串长度intns.length();if(kn){kn;}// 反转从 0 到 k-1 的字符for(intl0,rk-1;lr;l,r--){swap(s[l],s[r]);}returns;}intmain(){string sabcd;intk2;string resultreversePrefix(s,k);coutresultendl;return0;}