selected_coding_interview/docs/796. 旋转字符串.md
输入一个字符串 $s$ ,做如下操作:
此时,称 $goal$ 为 $s$ 的一个「旋转字符串」。
如下图所示,根据旋转字符串特点,若构造一个拼接字符串 $goal \ goal$ ,则有 $goal \ goal = R \ L \ R \ L = R \ s \ L$ ,即拼接字符串 $goal \ goal$ 中包含原字符串 $s$ 。因此,$goal$ 为 $s$ 的旋转字符串的「充要条件」为:
class Solution:
def rotateString(self, s: str, goal: str) -> bool:
return len(s) == len(goal) and s in (goal + goal)
class Solution {
public boolean rotateString(String s, String goal) {
return s.length() == goal.length() && (goal + goal).contains(s);
}
}
class Solution {
public:
bool rotateString(string s, string goal) {
return s.length() == goal.length() && (goal + goal).find(s) != -1;
}
};
时间复杂度: 设字符串 $s$ , $goal$ 的长度都为 $N$ 。
本文直接调用编程语言的库函数,时间复杂度由库函数的具体实现方法确定。
空间复杂度 $O(N)$ : 构造拼接字符串 $goal \ goal$ 使用 $O(N)$ 大小的额外空间。