Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public:
- //returns whether start[index....start.size()-1] can be converted to end[index...end.size()-1]
- bool h_canTransform(string start, string end, int index, deque<int> &posX, deque<int> &posL, deque<int> &posR){
- if(index == start.size()){
- return true;
- }
- if(!posX.empty() && posX.front() == index){
- posX.pop_front();
- }
- if(!posL.empty() && posL.front() == index){
- posL.pop_front();
- }
- if(!posR.empty() && posR.front() == index){
- posR.pop_front();
- }
- if(start[index] == end[index]){
- return h_canTransform(start, end, index+1, posX, posL, posR);
- }
- if(start[index] == 'X' && end[index] == 'L'){
- if(posL.empty()) return false;
- int pL = posL.front();
- if(posR.empty() || posR.front() > pL){
- swap(start[index], start[pL]);
- posL.pop_front();
- return h_canTransform(start, end, index+1, posX, posL, posR);
- }
- return false;
- }
- if(start[index] == 'R' && end[index]=='X'){
- //brint X to start[index]
- if(posX.empty()) return false;
- int pX = posX.front();
- if(posL.empty() || posL.front() > pX){
- swap(start[index], start[pX]);
- posX.pop_front();
- return h_canTransform(start, end, index+1, posX, posL, posR);
- }
- return false;
- }
- return false;
- }
- bool canTransform(string start, string end) {
- if(start.size() != end.size()){
- return false;
- }
- deque<int> posL;
- deque<int> posR;
- deque<int> posX;
- for(int i=0; i<start.size(); i++){
- if(start[i]=='L'){
- posL.push_back(i);
- }
- if(start[i]=='R'){
- posR.push_back(i);
- }
- if(start[i]=='X'){
- posX.push_back(i);
- }
- }
- return h_canTransform(start, end, 0, posX, posL, posR);
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement