Given two arrays, how do you check if one is a cyclic permutation of the other?
For example, given a = [1, 2, 3, 1, 5]
, b = [3, 1, 5, 1, 2]
, an
Here is simple adhoc approach to findout cyclic permutations with O(n) time complexity.
a = [1, 2, 3, 1, 5], b = [3, 1, 5, 1, 2]
Find index of b[0] in a[], lets say index is 'x'.Then start navigating in both the array's. a[] starts from index 'x' and b[] starts from '0'. Such that both of them must have same values. If not, they are not cyclic. Here is the sample code.
public class CyclicPermutation {
static char[] arr = { 'A', 'B', 'C', 'D' };
static char[] brr = { 'C', 'D', 'K', 'B' };
boolean dec = false;
public static void main(String[] args) {
boolean avail = true;
int val = getFirstElementIndex(brr[0]);
if(val ==Integer.MIN_VALUE){
avail = false;
return;
}
for (int i = val, j = 0; j <= brr.length-1; ) {
if (i > arr.length-1) {
i = 0;
}
if (arr[i] == brr[j]) {
i++;
j++;
} else {
avail = false;
System.out.println(avail);
return;
}
}
System.out.println(avail);
}
public static int getFirstElementIndex(char c) {
for (int i = 0; i <= arr.length; i++) {
if (arr[i] == c) {
return i;
}
}
return Integer.MIN_VALUE;
}
}