2337. 移动片段得到字符串

题目描述:

给你两个字符串 start 和 target ,长度均为 n 。每个字符串 仅 由字符 ‘L’、‘R’ 和 ‘_’ 组成,其中:
字符 ‘L’ 和 ‘R’ 表示片段,其中片段 ‘L’ 只有在其左侧直接存在一个 空位 时才能向 左 移动,而片段 ‘R’ 只有在其右侧直接存在一个 空位 时才能向 右 移动。
字符 ‘__’ 表示可以被 任意 ‘L’ 或 ‘R’ 片段占据的空位。
如果在移动字符串 start 中的片段任意次之后可以得到字符串 target ,返回 true ;否则,返回 false 。

示例:

来源:力扣(LeetCode)
来源:力扣(LeetCode)
来源:力扣(LeetCode)

解题思路:

由于通过字符个数和顺序排除一部分,在通过判断每个“L”字符能不能往前移,每个“R”字符能不能往后移。

相关代码:

class Solution {
    public boolean canChange(String start, String target) {
        if(!start.replace("_","").equals(target.replace("_",""))) {
            return false;
        }
        int[] s=new int[start.replace("_","").length()];
        int[] t=new int[target.replace("_","").length()];
        index(start,s);
        index(target,t);
        for(int i=0;i<s.length;i++) {
            if(start.charAt(s[i])=='L'&&s[i]<t[i]||start.charAt(s[i])=='R'&&s[i]>t[i]) return false;
        }
        return true;
    }
    public void index(String x,int[] n) {
        int j=0;
        for(int i=0;i<x.length();i++) {
            if(x.charAt(i)!='_') {
                n[j]=i;
                j++;
            }
        }
    }
}

代码效率:

来源:力扣(LeetCode)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值