C++ Solution with explanation
We can only move "R" backwards and "L" forward as we can convert "XL" to "LX" and "RX" to "XR"\n\n    - Maintain count of R\'s found in the "start" string to ma
We can only move "R" backwards and "L" forward as we can convert "XL" to "LX" and "RX" to "XR"\n\n    - Maintain count of R\'s found in the "start" string to match with "end"\n        - BECAUSE WE CAN ONLY MOVE "R" BACK WE INC THEM WHEN WE FIND THEM IN "start" AND DECREMENT IN "end" (matching step)\n        \n    - Maintain count of L\'s found in the "end" string to match with "start"\n        - BECAUSE WE CAN ONLY MOVE "L" FWD WE INC THEM WHEN WE FIND THEM IN "end" AND DECREMENT IN "start" (matching step)\n\n    - If at any point  we have unmatched "R" or "L" we can return false\n   \n   \n```\nbool canTransform(string start, string end) {\n        int i = 0;\n        int fwdL = 0, bwdR = 0;\n        \n        while (i < start.size()) {\n            \n            if (start[i] == \'R\') bwdR++;\n            \n            if (end[i]   == \'L\') fwdL++;\n            \n            if (end[i]   == \'R\') bwdR--;\n            \n            if (start[i] == \'L\') fwdL--;\n            \n\t\t\t /* If we have more R\'s or L\'s that can be matched or if a cross over b/w R & L has occured (indicated by both +ve) we can\'t transform further*/\n            if ((bwdR > 0 && fwdL > 0) || (bwdR < 0 || fwdL < 0))\n                return false;\n            \n            i++;\n        }\n        \n        return fwdL == 0 && bwdR == 0;\n    }\n```
[]