We are given two strings,
A
and B
.
A shift on
A
consists of taking string A
and moving the leftmost character to the rightmost position. For example, if A = 'abcde'
, then it will be 'bcdea'
after one shift on A
. Return True
if and only if A
can become B
after some number of shifts on A
.Example 1: Input: A = 'abcde', B = 'cdeab' Output: true Example 2: Input: A = 'abcde', B = 'abced' Output: false
Note:
A
andB
will have length at most100
.
Code (Java)
class Solution { public boolean rotateString(String A, String B) { if (A == null) { return B == null; } if (A.length() == 0) { return B.length() == 0; } if (A.length() != B.length()) { return false; } char[] arrayA = A.toCharArray(); for (int i = 0; i < A.length(); i++) { rotate(arrayA); String rotatedA = String.valueOf(arrayA); if (rotatedA.equals(B)) { return true; } } return false; } private void rotate(char[] A) { char firstCh = A[0]; for (int i = 1; i < A.length; i++) { A[i - 1] = A[i]; } A[A.length - 1] = firstCh; } }
Another Solution:
Approach #2: Simple Check [Accepted]
Intuition and Algorithm
All rotations of
A
are contained in A+A
. Thus, we can simply check whether B
is a substring of A+A
. We also need to check A.length == B.length
, otherwise we will fail cases like A = "a", B = "aa"
.
Complexity Analysis
- Time Complexity: , where is the length of
A
. - Space Complexity: , the space used building
A+A
.
No comments:
Post a Comment