🚩传送门:牛客题目
力扣题目

题目

给定两个字符串,[NC]114. 旋转字符串 - 图1[NC]114. 旋转字符串 - 图2。如果在若干次旋转操作之后,[NC]114. 旋转字符串 - 图3能变成[NC]114. 旋转字符串 - 图4,那么返回 true[NC]114. 旋转字符串 - 图5旋转操作 就是将[NC]114. 旋转字符串 - 图6 最左边的字符移动到最右边。

例如, 若 s = 'abcde',在旋转一次之后结果就是'bcdea'

示例 1:

输入: s = “abcde”, goal = “cdeab” 输出: true

示例 2:

输入: s = “abcde”, goal = “abced” 输出: false

解题思路:搜索字符串

首先,如果[NC]114. 旋转字符串 - 图7[NC]114. 旋转字符串 - 图8 的长度不一样,那么无论怎么旋转,[NC]114. 旋转字符串 - 图9 都不能得到 [NC]114. 旋转字符串 - 图10 ,返回 false

字符串 [NC]114. 旋转字符串 - 图11 包含了所有[NC]114. 旋转字符串 - 图12可以通过旋转操作得到的字符串,只需要检查 [NC]114. 旋转字符串 - 图13 是否为 [NC]114. 旋转字符串 - 图14 的子字符串即可。

  • s = "abcde"s+s = "abcdeabcde"``s+s = "abcdeabcde"``s+s = "abcdeabcde"

复杂度分析

时间复杂度:[NC]114. 旋转字符串 - 图15,其中 [NC]114. 旋转字符串 - 图16 指的是字符串[NC]114. 旋转字符串 - 图17 的长度,KMP 算法搜索子字符串的时间复杂度为[NC]114. 旋转字符串 - 图18,其他搜索子字符串的方法会略有差异。

空间复杂度:[NC]114. 旋转字符串 - 图19,其中 [NC]114. 旋转字符串 - 图20 指的是字符串[NC]114. 旋转字符串 - 图21 的长度,KMP 算法搜索子字符串的空间复杂度为[NC]114. 旋转字符串 - 图22,其他搜索子字符串的方法会略有差异。

我的代码

  1. class Solution {
  2. public boolean rotateString(String s, String goal) {
  3. return s.length() == goal.length() && (s + s).contains(goal);
  4. }
  5. }