---
# System prepended metadata

title: 0777. Swap Adjacent in LR String
tags: [Leetcode, Two Pointers, Medium]

---

# 0777. Swap Adjacent in LR String
###### tags: `Leetcode` `Medium` `Two Pointers`
Link: https://leetcode.com/problems/swap-adjacent-in-lr-string/description/
## 思路
和[2337. Move Pieces to Obtain a String](https://hackmd.io/PhWeQn2_SjSyIYg7L2iuWg)一样
首先要保证删掉所有的X之后 两个字符串是一样的 因为L和R不能跨过对方
其次因为```end```里的L必须是从```start```里对应的L向左移动得到，所以另一个必要条件就是查看他们的初始位置：```start```里的L必须比```end```里对应的L更靠右。同理，```start```里的R必须比```end```里对应的R更靠左。如果不满足，就可以直接返回false。
## Code
```java=
class Solution {
    public boolean canTransform(String start, String end) {
        if(start.length()!=end.length()) return false;
        int p1=0, p2=0;
        for(p1=0; p1<start.length(); p1++){
            if(start.charAt(p1)=='X') continue;
            while(p2<end.length() && end.charAt(p2)=='X'){
                p2++;
            }
            if(p2==end.length()) return false;
            if(start.charAt(p1)!=end.charAt(p2)) return false;
            if(start.charAt(p1)=='L' && p1<p2) return false;
            if(start.charAt(p1)=='R' && p1>p2) return false;
            p2++;
        }
        while(p2<end.length()){
            if(end.charAt(p2)!='X') return false;
            p2++;
        }
        return true;
    }
}
```