您的位置:首页 > 游戏 > 游戏 > 【字符串处理】【双指针】个人练习-Leetcode-777. Swap Adjacent in LR String

【字符串处理】【双指针】个人练习-Leetcode-777. Swap Adjacent in LR String

2024/10/6 22:20:47 来源:https://blog.csdn.net/Rstln/article/details/140109907  浏览:    关键词:【字符串处理】【双指针】个人练习-Leetcode-777. Swap Adjacent in LR String

题目链接:https://leetcode.cn/problems/swap-adjacent-in-lr-string/description/

题目大意:给两个字符串start, end,只包含XLR三种字符。可以进行一次操作将XL转换成LX或者将RX转换为XR,返回是否存在方法使得start能转换成end

思路:操作中可以看出,这只不过是让L和X或R和X交换位置而已,L、R的相对位置不会变。因此先把所有X去掉,看看只剩下LR的两个字符串是否一致。不一致就返回false

我原本以为这就到头了,但没想到还没过,看了题解才发现,这个交换中,L只能左移,R只能右移,因此还要对比一下startend中,相对位置对应的每个L和R,是否满足【L只能左移,R只能右移】这个条件。这个步骤用双指针完成即可。

完整代码

class Solution {
public:bool canTransform(string start, string end) {string s1, s2;for (auto c : start) {if (c != 'X')s1.push_back(c);}for (auto c : end) {if (c != 'X')s2.push_back(c);}if (s1 != s2)return false;int i = 0, j = 0;while (i < start.size()) {if (start[i] == 'X') {i++;continue;}while (j < end.size() && end[j] != start[i])j++;if (start[i] == 'R' && i > j)return false;if (start[i] == 'L' && i < j)return false;i++;j++;}return true;}
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com