Open In App

Javascript Program to Check if all rows of a matrix are circular rotations of each other

Last Updated : 02 Aug, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

Given a matrix of n*n size, the task is to find whether all rows are circular rotations of each other or not. 

Examples: 

Input: mat[][] = 1, 2, 3
                 3, 1, 2
                 2, 3, 1
Output:  Yes
All rows are rotated permutation
of each other.

Input: mat[3][3] = 1, 2, 3
                   3, 2, 1
                   1, 3, 2
Output:  No
Explanation : As 3, 2, 1 is not a rotated or 
circular permutation of 1, 2, 3

The idea is based on the below article. 
A Program to check if strings are rotations of each other or not

Steps :  

  1. Create a string of first row elements and concatenate the string with itself so that string search operations can be efficiently performed. Let this string be str_cat.
  2. Traverse all remaining rows. For every row being traversed, create a string str_curr of current row elements. If str_curr is not a substring of str_cat, return false.
  3. Return true.

Below is the implementation of the above steps. 

Javascript




<script>
 
// Javascript program to check if all rows of a matrix
// are rotations of each other
     
// Returns true if all rows of mat[0..n-1][0..n-1]
// are rotations of each other.
function isPermutedMatrix(mat, n)
{
     
    // Creating a string that contains
    // elements of first row.
    let str_cat = "";
    for (let i = 0; i < n; i++)
    {
        str_cat = str_cat + "-" +
                  (mat[0][i]).toString();
    }
     
    // Concatenating the string with itself
    // so that substring search operations 
    // can be performed on this
    str_cat = str_cat + str_cat;
 
    // Start traversing remaining rows
    for(let i = 1; i < n; i++)
    {
         
        // Store the matrix into vector in the form
        // of strings
        let curr_str = "";
        for(let j = 0; j < n; j++)
        {
            curr_str = curr_str + "-" +
                       (mat[i][j]).toString();
        }
         
        // Check if the current string is present in
        // the concatenated string or not
        if (str_cat.includes(curr_str))
        {
            return true;
        }
    }
    return false;
}
 
// Drivers code
let n = 4;
let mat = [ [ 1, 2, 3, 4 ],
            [ 4, 1, 2, 3 ],
            [ 3, 4, 1, 2 ],
            [ 2, 3, 4, 1 ] ];
             
if (isPermutedMatrix(mat, n))
    document.write("Yes")
else
    document.write("No")
 
// This code is contributed by rag2127
 
</script>


Output: 

Yes

Time Complexity: O(n^3) 
Auxiliary Space: O(n)

Please refer complete article on Check if all rows of a matrix are circular rotations of each other for more details!



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads