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:
AandBwill 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