跳到正文
源码达人

【算法】字符串平移

算法 柠檬鱼

需求

我们规定,字符串平移是指将字符串最左边的字符移动到最右边,其他位置的字符保持不变。现在,输入两个字符串,尝试编程判断第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
}