Sunday, April 15, 2018

Leetcode 796. Rotate String

We are given two strings, A and B.
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 and B will have length at most 100.

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: O(N^2), where N is the length of A.
  • Space Complexity: O(N), the space used building A+A.

No comments:

Post a Comment