网站搜索引擎优化的方法,如何搭建外贸网站,关键词排行优化网站,个人网页设计与实现ppt右旋字符串
题目#xff1a;55. 右旋字符串#xff08;第八期模拟笔试#xff09; (kamacoder.com)
题目描述
字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k#xff0c;请编写一个函数#xff0c;将字符串中的后面…右旋字符串
题目55. 右旋字符串第八期模拟笔试 (kamacoder.com)
题目描述
字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k请编写一个函数将字符串中的后面 k 个字符移到字符串的前面实现字符串的右旋转操作。
例如对于输入字符串 “abcdefg” 和整数 2函数应该将其转换为 “fgabcde”。
输入描述
输入共包含两行第一行为一个正整数 k代表右旋转的位数。第二行为字符串 s代表需要旋转的字符串。
输出描述
输出共一行为进行了右旋转操作后的字符串。
输入示例
2
abcdefg输出示例
fgabcde提示信息
数据范围 1 k 10000, 1 s.length 10000;
方法一
先对字符数组进行扩容然后利用双指针将前面的值付给后面再在后面取多余的数赋值到前面。
package mainimport fmtfunc main() {var s stringvar k intfmt.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 % LennewBytes : make([]byte, LenexPlace)r : len(newBytes) - 1l : Len - 1for l 0 {newBytes[r] bytes[l]r--l--}l 0r Lenfor exPlace ! 0 {newBytes[l] newBytes[r]lrexPlace--}return string(newBytes[:Len])
}时间复杂度O(n)空间复杂度因为创建一个新字节数组所以为O(n)。
不用额外空间行不行呢答案是可以的就是反转再反转。
方法二
利用反转先将两个局部反转在将整体反转。
package mainimport fmtfunc main() {var s stringvar k intfmt.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%LenreverseRightHandSideN(bytes[:idx])reverseRightHandSideN(bytes[idx:])reverseRightHandSideN(bytes)return string(bytes)
}func reverseRightHandSideN(bytes []byte) {l, r : 0, len(bytes)-1for l r {bytes[l], bytes[r] bytes[r], bytes[l]lr--}
}当然你也可以先整体反转再局部反转。快去试试吧。