Check if two arrays are cyclic permutations

前端 未结 4 1041
情歌与酒
情歌与酒 2021-02-14 08:41

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

4条回答
  •  借酒劲吻你
    2021-02-14 09:07

    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;
        }
    
    
    }
    

提交回复
热议问题