需求

我们规定,字符串平移是指将字符串最左边的字符移动到最右边,其他位置的字符保持不变。现在,输入两个字符串,尝试编程判断第2个字符串是否 可以由第1个 字符串平移得到。例如输入“hello”和“llohe”,则需要返回True作为答案,因为将“hello”平移一次将变成“elloh”,再平移一次就 会变成“llohe”。

思路

本题的核心在于如何进行字符串的平移操作。我们分析一下字符串平移的特点可以发现,每平移一次,实际上就是将字符串的首字符移动到字符串的末尾。我们在 操作时,可以先将字符串从第2个字符开始截取到尾部形成新的字符串,再将首字符拼接到新字符串末尾即可。

实现

package chapter13

func rotateString(original, target string) bool {
    if len(original) != len(target) {
        return false
    }

    if original == target {
        return true
    }
    // 考虑到中文或其它字符,所以这里先转换[]rune
    runes := []rune(original)
    for i := 0; i < len(runes); i++ {
        runes = append(runes[1:], runes[0])
        if string(runes) == target {
            return true
        }
    }

    return false
}