01.09. String Rotation
Description
Given two strings, s1Β and s2, write code to check if s2 is a rotation of s1 (e.g.,"waterbottle" is a rotation of"erbottlewat").Β Can you useΒ only one call to the method thatΒ checks if one word is a substring of another?
Example 1:
Input: s1 = "waterbottle", s2 = "erbottlewat" Output: True
Example 2:
Input: s1 = "aa", "aba" Output: False
Β
Note:
0 <= s1.length, s1.length <=Β 100000
Solutions
Solution 1: String Matching
First, if the lengths of strings \(s1\) and \(s2\) are not equal, they are definitely not rotation strings of each other.
Second, if the lengths of strings \(s1\) and \(s2\) are equal, then by concatenating two \(s1\) together, the resulting string \(s1 + s1\) will definitely include all rotation cases of \(s1\). At this point, we just need to check whether \(s2\) is a substring of \(s1 + s1\).
# True
s1 = "aba"
s2 = "baa"
s1 + s1 = "abaaba"
^^^
# False
s1 = "aba"
s2 = "bab"
s1 + s1 = "abaaba"
The time complexity is \(O(n)\), and the space complexity is \(O(n)\). Here, \(n\) is the length of string \(s1\).
1 2 3 | |
1 2 3 4 5 | |
1 2 3 4 5 6 | |
1 2 3 | |
1 2 3 | |
1 2 3 4 5 | |
1 2 3 4 5 | |