Since you asked for an algorithm and not an application, take a look at “The String-to-String Correction Problem with Block Moves” by Walter Tichy. There are others, but that’s the original, so you can look for papers that cite it to find more.
The paper cites Paul Heckel’s paper “A technique for isolating differences between files” (mentioned in this answer to this question) and mentions this about its algorithm:
Heckel[3] pointed out similar problems with LCS techniques and proposed a
linear-lime algorithm to detect block moves. The algorithm performs adequately
if there are few duplicate symbols in the strings. However, the algorithm gives
poor results otherwise. For example, given the two strings aabb and bbaa,
Heckel’s algorithm fails to discover any common substring.