题目的意思是,若R的右边为X则R可以右移,若L的左边为X则L可以左移
首先想到的是,把所有的X剔除后,若剩下的字符串相同,则表示可以转换
为了检验这一猜想,考虑了两种极端的情况:
1.XR和RX
2.LX和XL
这两种情况剔除X后相同,但却无法转换
所以,有结论:
当剔除了X后的字符串不仅要相同,而且在对应的字符中,START中的R应该比END中的R靠前,START中的L应该比END中的靠后
class Solution {
public:
bool canTransform(string start, string end) {
int n1=start.size(),n2=end.size(),i=0,j=0;
if(n1!=n2) return false;
while(i<n1 && j<n1)
{
while(i<n1 && start[i]=='X') i++;
while(j<n1 && end[j]=='X') j++;
/*if(i>n1 && j>n1) return true;
if(i>n1 || j>n1) return false;*/
if(start[i]!=end[j]) return false;
if(start[i]=='L' && i<j || start[i]=='R' && i>j) return false;
i++;
j++;
}
return true;
}
};