题目
在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作。一次移动操作指用一个"LX"替换一个"XL",或者用一个"XR"替换一个"RX"。现给定起始字符串start和结束字符串end,请编写代码,当且仅当存在一系列移动操作使得start可以转换成end时, 返回True。 示例 : ```cpp 输入: start = "RXXLRXRXL", end = "XRLXXRRLX" 输出: True 解释: 我们可以通过以下几步将start转换成end: RXXLRXRXL -> XRXLRXRXL -> XRLXRXRXL -> XRLXXRRXL -> XRLXXRRLX
解题
此题和leetcode-2337:移动片段得到字符串基本一样
方法一:
class Solution { public: bool canTransform(string start, string end) { string s,t; int m=start.size(),n=end.size(); if(m!=n) return false; for(int i=0;i<m;i++){ if(start[i]!='X') s.push_back(start[i]); if(end[i]!='X') t.push_back(end[i]); } if(s!=t) return false; int j=0; for(int i=0;i<start.size();i++){ if(start[i]=='X') continue; while(j<end.size()&&end[j]=='X') j++; if(start[i]=='L'&&i<j) return false; if(start[i]=='R'&&i>j) return false; j++; } return true; } };