当前位置:   article > 正文

力扣解法汇总777. 在LR字符串中交换相邻字符_力扣 相邻取反

力扣 相邻取反

 目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣


描述:

在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作。一次移动操作指用一个"LX"替换一个"XL",或者用一个"XR"替换一个"RX"。现给定起始字符串start和结束字符串end,请编写代码,当且仅当存在一系列移动操作使得start可以转换成end时, 返回True。

示例 :

输入: start = "RXXLRXRXL", end = "XRLXXRRLX"
输出: True
解释:
我们可以通过以下几步将start转换成end:
RXXLRXRXL ->
XRXLRXRXL ->
XRLXRXRXL ->
XRLXXRRXL ->
XRLXXRRLX
 

提示:

1 <= len(start) = len(end) <= 10000。
start和end中的字符串仅限于'L', 'R'和'X'。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/swap-adjacent-in-lr-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

* 解题思路:
* 这里看的也是官方题解,我本来的思路是分条件去判断的,最后发现要判断的条件太多了。
* 官方的题解是跳过X,直接获取跳过X的字符是否相同,如果不相同一定会有问题。
* 如果相同,则继续判断是L还是R,如果是L,则start中的indexL1>end中的indexL2。
* R的逻辑也是类似。

代码:

  1. public class Solution777 {
  2. public boolean canTransform(String start, String end) {
  3. int n = start.length();
  4. int i = 0, j = 0;
  5. while (i < n && j < n) {
  6. while (i < n && start.charAt(i) == 'X') {
  7. i++;
  8. }
  9. while (j < n && end.charAt(j) == 'X') {
  10. j++;
  11. }
  12. if (i < n && j < n) {
  13. if (start.charAt(i) != end.charAt(j)) {
  14. return false;
  15. }
  16. char c = start.charAt(i);
  17. if ((c == 'L' && i < j) || (c == 'R' && i > j)) {
  18. return false;
  19. }
  20. i++;
  21. j++;
  22. }
  23. }
  24. while (i < n) {
  25. if (start.charAt(i) != 'X') {
  26. return false;
  27. }
  28. i++;
  29. }
  30. while (j < n) {
  31. if (end.charAt(j) != 'X') {
  32. return false;
  33. }
  34. j++;
  35. }
  36. return true;
  37. }
  38. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/588052
推荐阅读
相关标签
  

闽ICP备14008679号