题目
给定两个字符串, 和
。如果在若干次旋转操作之后,
能变成
,那么返回
true
。 的 旋转操作 就是将
最左边的字符移动到最右边。
例如, 若 s = 'abcde'
,在旋转一次之后结果就是'bcdea'
。
示例 1:
输入: s = “abcde”, goal = “cdeab” 输出: true
示例 2:
输入: s = “abcde”, goal = “abced” 输出: false
解题思路:搜索字符串
首先,如果 和
的长度不一样,那么无论怎么旋转,
都不能得到
,返回
false
。
字符串 包含了所有
可以通过旋转操作得到的字符串,只需要检查
是否为
的子字符串即可。
s = "abcde"
、s+s = "abcdeabcde"``s+s = "abcdeabcde"``s+s = "abcdeabcde"
复杂度分析
时间复杂度:,其中
指的是字符串
的长度,KMP 算法搜索子字符串的时间复杂度为
,其他搜索子字符串的方法会略有差异。
空间复杂度:,其中
指的是字符串
的长度,KMP 算法搜索子字符串的空间复杂度为
,其他搜索子字符串的方法会略有差异。
我的代码
class Solution {
public boolean rotateString(String s, String goal) {
return s.length() == goal.length() && (s + s).contains(goal);
}
}