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, 33, 2, 1
1, 3, 2
Output: No,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 :
- 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.
- 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.
- Return true.
Below is the implementation of the above steps.
# Python3 program to check if all rows # of a matrix are rotations of each other MAX = 1000
# Returns true if all rows of mat[0..n-1][0..n-1] # are rotations of each other. def isPermutedMatrix(mat, n) :
# Creating a string that contains
# elements of first row.
str_cat = ""
for i in range (n) :
str_cat = str_cat + "-" + str (mat[ 0 ][i])
# 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 i in range ( 1 , n) :
# Store the matrix into vector
# in the form of strings
curr_str = ""
for j in range (n) :
curr_str = curr_str + "-" + str (mat[i][j])
# Check if the current string is present
# in the concatenated string or not
if (str_cat.find(curr_str)) :
return True
return False
# Driver code if __name__ = = "__main__" :
n = 4
mat = [[ 1 , 2 , 3 , 4 ],
[ 4 , 1 , 2 , 3 ],
[ 3 , 4 , 1 , 2 ],
[ 2 , 3 , 4 , 1 ]]
if (isPermutedMatrix(mat, n)):
print ( "Yes" )
else :
print ( "No" )
# This code is contributed by Ryuga |
Yes
Time complexity: O(n3)
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!