面试题 01.09. 字符串轮转
字符串轮转。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串)。
示例1:
输入:s1 = "waterbottle", s2 = "erbottlewat"
输出:True
方法一:字符串匹配
首先,如果字符串 s1 和 s2 长度不相等,那么肯定不是旋转字符串。
其次,如果字符串 s1 和 s2 长度相等,那么将两个 s1 连接,得到的 s1 + s1 这个字符串一定包含了 s1 旋转的所有情况,这时候我们只要判断 s2 是否是 s1+ s1的子串即可。
# 成立
s1 = "aba"
s2 = "baa"
s1 + s1 = "abaaba"
^^^# 不成立
s1 = "aba"
s2 = "bab"
s1 + s1 = "abaaba"
func isFlipedString(s1 string, s2 string) bool {
return len(s1) == len(s2) && strings.Contains(s1+s1, s2)
}
复杂度分析:
字符串匹配的时空复杂度均为 O(n),其中 n 表示 s1 或 s2 的长度。