796. Rotate String
Given two strings s and goal, return true if and only if s can become goal after some number of shifts on s.
A shift on s consists of moving the leftmost character of s to the rightmost position.
- For example, if s = “abcde”, then it will be “bcdea” after one shift.
Example 1:
Input: s = “abcde”, goal = “cdeab”
Output: true
Example 2:
Input: s = “abcde”, goal = “abced”
Output: false
Constraints:
- 1 <= s.length, goal.length <= 100
- s and goal consist of lowercase English letters.
From: LeetCode
Link: 796. Rotate String
Solution:
Ideas:
-
If two strings s and goal are of different lengths, return false immediately.
-
If we concatenate s with itself (e.g., “abcde” + “abcde” = “abcdeabcde”), then all possible rotations of s will appear as substrings of this concatenated string.
-
Therefore, if goal is a substring of s + s, then it is a valid rotation of s.
Code:
bool rotateString(char* s, char* goal) {
int len_s = strlen(s);
int len_g = strlen(goal);
if (len_s != len_g) return false;
// Allocate space for concatenated string
char double_s[201]; // 2*100 + 1 (for null terminator)
strcpy(double_s, s);
strcat(double_s, s);
return strstr(double_s, goal) != NULL;
}