算法题
字符串(string)
右旋字符串

右旋字符串

题目

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

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

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

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

样例输入:

2
abcdefg

样例输出:

fgabcde

思路

整体倒叙,再把两段子串顺序颠倒,两个段子串里的的字符在倒叙一把,负负得正,这样就不影响子串里面字符的顺序了。

解法

import "fmt"
 
func reverse(str []byte, l, r int) {
    for l < r {
        str[l], str[r] = str[r], str[l]
        l++
        r--
    }
}
 
func main() {
    var str string
    var target int
 
    fmt.Scanln(&target)
    fmt.Scanln(&str)
    strByte := []byte(str)
 
    reverse(strByte, 0, len(strByte) - 1)
    reverse(strByte, 0, target - 1)
    reverse(strByte, target, len(strByte) - 1)
 
    fmt.Printf(string(strByte))
}