当前位置: 首页 > news >正文

【LeetCode每日一题】2022-10-02 777. 在LR字符串中交换相邻字符 Java实现

文章目录

  • 题目
  • 题目主要信息
  • 具体步骤


题目

在这里插入图片描述

题目主要信息

题目中给出,有两种替换方式:

  • LX 替换 XL
  • XR 替换 RX

可以将字符串中的 X 看作空位,那么上述两种替换方式可以理解为:

  • 在不越过其它字符的前提下,将L向左移动
  • 在不越过其它字符的前提下,将R向右移动

其中,L和R是不能交换位置的

如果start可以通过这两种移动方式转换为end,必须要满足以下条件:

  • 去除空格,字符串中的L和R必须一一对应
  • 对应的L在start中的位置要靠右,即大于等于在end中的位置(这样才有左移的余地)
  • 对应的R在start中的位置要靠左,即小于等于在end中的位置(这样才有右移的余地)

这样这道题就变成了对字符位置的比较和判断

具体步骤

用变量 i 和变量 j 分别指向字符串 start 和 end ,跳过 X,当碰到的字符不是X时,用 startChar 和 endChar记录下来,

  • 如果 startChar 和 endChar不相等,那么直接返回false
  • 如果相等,还要就 startChar 和 endChar 是 L 还是 R分开讨论
    • 如果是L(因为L可以在满足条件的情况下向左移),则要求 startChar 中的 L 的下标大于等于 endChar 中 L 的下标
    • 如果是R(因为R可以在满足条件的情况下向右移),则要求 startChar 中的 R 的下标要小于等于 endChar 中的 R的下标

不过也存在 start 和 end 中 L 和 R 的总数和 end 中 L 和 R 的总数不一样的情况,这样,可能 i 会比 j 先结束,或者 j 会比 i 先结束。

LXX
LXL
或
RXR
RXX

这样,在while循环结束以后,还需要再判断一下

class Solution {
    public boolean canTransform(String start, String end) {

        //获取字符串的长度
        int len = start.length();

        //i用来遍历start
        int i = 0;

        //j用来遍历end
        int j = 0;

        char startChar = 0, endChar = 0;

        while (i < len && j < len) {
            while (i < len && start.charAt(i) == 'X') {
                i++;

            }
            if (i != len) {
                startChar = start.charAt(i);
            }
            while (j < len && end.charAt(j) == 'X') {
                j++;
            }
            if (j != len) {
                endChar = end.charAt(j);
            }
            if (startChar != endChar) {
                return false;
            } else if ((startChar == 'L' && i < j) || (startChar == 'R' && i > j)) {
                return false;
            }
            i++;
            j++;
        }

        if (j >= len && i < len) {
            while (i < len) {
                if (start.charAt(i) != 'X') {
                    return false;
                }
                i++;
            }
        }

        if (i >= len && j < len) {
            while (j < len) {
                if (end.charAt(j) != 'X') {
                    return false;
                }
                j++;
            }
        }
        return true;
    }
}

在这里插入图片描述


class Solution {
    public boolean canTransform(String start, String end) {

        //获取字符串的长度
        int len = start.length();

        //i用来遍历start
        int i = 0;

        //j用来遍历end
        int j = 0;

        while (true) {
            while (i < len && start.charAt(i) == 'X') {
                i++;
            }
            while (j < len && end.charAt(j) == 'X') {
                j++;
            }
            if (i >= len && j >= len) {
                return true;
            }
            if (i >= len || j >= len || start.charAt(i) != end.charAt(j)) {
                return false;
            }
            if (start.charAt(i)=='L' && i < j){
                return false;
            }
            if (start.charAt(i)=='R' && j < i){
                return false;
            }
            i++;
            j++;
        }
    }
}

在这里插入图片描述

相关文章:

  • 网络安全从业人员能力图谱
  • 从程序员的角度看人类通信史
  • OpenCV之识别银行卡号
  • 回归-线性回归算法(房价预测项目)
  • 【一起学数据结构与算法】Java实现双链表
  • Spring Boot集成阿里云视频点播服务的过程记录
  • SpringBoot社区居民联系方式管理系统(附源码)
  • [ccc3.0][数字钥匙] UWB配置和使用(二)
  • MongoDB(一)
  • C#面向对象程序设计课程实验二: 实验名称:Windows 窗体程序
  • MySql主从同步
  • java基于springboot+Vue+nodejs的高校运动会报名管理系统 element
  • 单链表❀数据结构
  • Linux——孤儿进程|进程的优先级 用top命令去修改优先级 其他概念 环境变量 PATH 获取环境变量
  • Linux系统编程-网络基础(四)-协议03:数据包封装【以太网(Mac)帧:最大值1500字节称为以太网的MTU(最大传输单元),不包括帧报头长度】
  • [case10]使用RSQL实现端到端的动态查询
  • 【个人向】《HTTP图解》阅后小结
  • Android 架构优化~MVP 架构改造
  • ES6语法详解(一)
  • JavaScript服务器推送技术之 WebSocket
  • Leetcode 27 Remove Element
  • windows下如何用phpstorm同步测试服务器
  • 分布式熔断降级平台aegis
  • 前端面试之闭包
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 手机端车牌号码键盘的vue组件
  • 说说动画卡顿的解决方案
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • MPAndroidChart 教程:Y轴 YAxis
  • Spring第一个helloWorld
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​configparser --- 配置文件解析器​
  • #QT项目实战(天气预报)
  • (2)(2.10) LTM telemetry
  • (4)事件处理——(7)简单事件(Simple events)
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (二)fiber的基本认识
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (全注解开发)学习Spring-MVC的第三天
  • (三)mysql_MYSQL(三)
  • .Net 路由处理厉害了
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .net 提取注释生成API文档 帮助文档
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .NET6实现破解Modbus poll点表配置文件
  • .Net面试题4
  • .NET企业级应用架构设计系列之技术选型
  • .php文件都打不开,打不开php文件怎么办
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • @RunWith注解作用
  • [ 蓝桥杯Web真题 ]-布局切换
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹