LeetCode·每日一题·777.在LR字符串中交换相邻字符·双指针

链接:https://leetcode.cn/problems/swap-adjacent-in-lr-string/solution/-by-xun-ge-v-w3b9/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 

题目

 

思路

根据题意,我们每次移动要么是将 XL 变为 LX,要么是将 RX 变为 XR,而该两者操作可分别看做将 L 越过多个 X 向左移动,将 R 越过多个 X 向右移动。

因此在 start 和 end 中序号相同的 L 和 R 必然满足坐标性质:

  • 序号相同的 L : start 的下标不小于 end 的下标(即 L 不能往右移动)
  • 序号相同的 R : start 的下标不大于 end 的下标(即 R 不能往左移动)

其中「序号」是指在 LR 字符串中出现的相对顺序。

代码

bool canTransform(char * start, char * end) {
    int n = strlen(start);
    int i = 0, j = 0;
    while (i < n || j < n) {
        while (i < n && start[i] == 'X') i++;
        while (j < n && end[j] == 'X') j++;//对于x可以直接不处理
        if (i == n || j == n) return i == j;//到末尾了,如果都到末尾说明元素个数一样可以换到最后
        if (start[i] != end[j]) return false;//如果不一样说明L或者R的相对位置不一样
        if (start[i] == 'L' && i < j) return false;//一样则相对位置需要一样
        if (start[i] == 'R' && i > j) return false;
        i++; j++;
    }
    return i == j;
}


作者:xun-ge-v
链接:https://leetcode.cn/problems/swap-adjacent-in-lr-string/solution/-by-xun-ge-v-w3b9/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值