JavaInterview JavaInterview
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)

『Java面试+Java学习』
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)
  • 指南
  • 简历

  • Java

  • 面试

  • 算法

  • algorithm
  • leetcode
JavaInterview.cn
2022-10-07
目录

在LR字符串中交换相邻字符Java

文章发布较早,内容可能过时,阅读注意甄别。

# 题目

在一个由 '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'。

# 思路

// 双指针

# 解法


class Solution {
    // 双指针
    public boolean canTransform(String start, String end) {
        int i = 0 , j = 0 , len = start.length();
        while(i<=len && j<=len){ //小于等于是为了处理 RXR XXR    有一方指针越界,另一方没有越界
 //定位第一个不是X的字符,判断其相对位置
            while(i<len && start.charAt(i) == 'X') i++; 
            while(j<len && end.charAt(j) == 'X') j++;
            if(i == len || j == len){
                return i==j;
            }
//相对位置:start 的 L一定要在end的L的右侧,才能向左交换 ....
            if(start.charAt(i) != end.charAt(j)) return false;
            if(start.charAt(i) == 'L' && i<j) return false;
            if(start.charAt(i) == 'R' && i>j) return false;
            i++;
            j++;
        }
        return true;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 总结

  • 分析出几种情况,然后分别对各个情况实现
微信 支付宝
最近更新
01
1686. 石子游戏VI Java
08-18
02
1688. 比赛中的配对次数 Java
08-18
03
1687. 从仓库到码头运输箱子 Java
08-18
更多文章>
Theme by Vdoing | Copyright © 2019-2025 JavaInterview.cn
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式