噫吁汐 2022-10-02 11:19 采纳率: 95%
浏览 26
已结题

力扣:在lr字符串中交换相应字符,对于测试用例有一处不懂

img

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

我理解的题目解析: 1)‘R’只能向右移动,并且只能移向’X’,‘L’只能向左移动,并且只能移向’X’。
2)若字符串为奇数个,且最后剩余3个字符,则应该比较后两个,跳过第三个

当l左边为x时,l应该向左边移动,故移动后的字符串应该是lx,与输入的匹配字符串不符合,应该是false,但题目预期结果是true,我不太清楚为什么是true,求解答,谢谢

我的代码如下:

public boolean canTransform(String start, String end) {

        //题目解析: 1)‘R’只能向右移动,并且只能移向’X’,‘L’只能向左移动,并且只能移向’X’。
        //          2)若字符串为奇数个,且最后剩余3个字符,则应该比较后两个,跳过第三个

        //将两个字符串存入数组
        String[] arrStart=start.split("");
        String[] arrEnd=end.split("");
        //如果两个数组长度不相等,直接返回false
        if(arrStart.length!=arrEnd.length){
            return false;
        }
        //如果两个字符串都只有一个字符
        if(arrStart.length==1){
            if(arrStart[0].equals(arrEnd[0])){
                return true;
            }
            return false;
                
        }

        //若为多个字符
        for(int i=1;i<arrStart.length;){
            //字符串为奇数个,且i是倒数第三个,将第三位跳过
            //此时length-1为索引最后一位,因为i是从1开始比较当前一位和前一位的,故要再减1,将位置定在倒数第二位
            if(arrStart.length%2!=0 & i==arrStart.length-1-1){
                i++;
            }else{
                //为RX
                if(arrStart[i-1].equals("R") & arrStart[i].equals("X")){
                    arrStart[i-1]="X";
                    arrStart[i]="R";
                    i=i+2;
                    continue;//这里需写continue;否则下面的if也会执行
                }
                //为XL
                if(arrStart[i-1].equals("X") & arrStart[i].equals("L")){
                    arrStart[i-1]="L";
                    arrStart[i]="X";
                    i=i+2;
                    continue;
                }else{
                    //若都不是,则i往后移2位
                    i++;
                }

            }
            
        }
        //注意,这里要用循环判断数组是否相等,不能用arrStart.equals(arrEnd)来判断
        for(int i=0;i<arrStart.length;i++){
            if(!arrStart[i].equals(arrEnd[i])){
                return false;
            }

        }
        //若两个数相等,则返回true
        return true;







    }

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 10月10日
    • 创建了问题 10月2日

    悬赏问题

    • ¥15 SQLServer怎么录入下标
    • ¥100 无网格伽辽金方法研究裂纹扩展的程序
    • ¥15 错误于library(org.Hs.eg.db): 不存在叫‘org.Hs.eg.db’这个名称的程序包,如何解决?
    • ¥60 求一个图片处理程序,要求将图像大小跟现实生活中的大小按比例联系起来的
    • ¥50 求一位精通京东相关开发的专家
    • ¥100 求懂行的大ge给小di解答下!
    • ¥15 pcl运行在qt msvc2019环境运行效率低于visual studio 2019
    • ¥15 MAUI,Zxing扫码,华为手机没反应。可提高悬赏
    • ¥15 python运行报错 ModuleNotFoundError: No module named 'torch'
    • ¥100 华为手机私有App后台保活