Daily LeetCode – day0065 0777. Swap Adjacent in LR String

// 0777. Swap Adjacent in LR String
class Solution {
    public boolean canTransform(String start, String end) {
        char[] s = start.toCharArray();
        char[] e = end.toCharArray();
        int len = s.length;
        int xs = 0;
        for (int i = 0; i < len; ++i) {
            if (s[i] == 'X') ++xs;
            if (e[i] == 'X') --xs;
        }
        if (xs != 0) return false;
        for (int i = 0, j = 0; i < len; ++i) {
            if (s[i] == 'L') {
                while (j < len && e[j] != 'L') ++j;
                if (j > i) return false;
                ++j;
            }
            if (s[i] == 'R') {
                while (j < len && e[j] != 'R') ++j;
                if (j < i) return false;
                ++j;
            }
        }
        return true;
    }
}
学习笔记:
这道题特别难,L可以往左边走,R可以往右边走,但互相不可以跨越。
那就是说X的总数一样,L总数一样,R总数一样。
然后从左到右的L和R顺序都一样,并且这样还不够!我就被坑在这里面了。
因为LX是变不到XL的,L没办法往右。
所以要用双指针跑,如果L的话,i要小于等于j,如果是R的话,i要大于等于j。


关于樊轶群

一个善良的理想主义者。
此条目发表在每日LeetCode分类目录。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注