【每日一题Day301】LC2337移动片段得到字符串 | 双指针 计分

简介: 【每日一题Day301】LC2337移动片段得到字符串 | 双指针 计分

移动片段得到字符串【LC2337】

给你两个字符串 start 和 target ,长度均为 n 。每个字符串 仅 由字符 'L'、'R' 和 '_' 组成,其中:

字符 'L' 和 'R' 表示片段,其中片段 'L' 只有在其左侧直接存在一个 空位 时才能向 左 移动,而片段 'R' 只有在其右侧直接存在一个 空位 时才能向 右 移动。

字符 '_' 表示可以被 任意 'L' 或 'R' 片段占据的空位。

如果在移动字符串 start 中的片段任意次之后可以得到字符串 target ,返回 true ;否则,返回 false 。

双指针

思路

如果start进行移动可以的带target,那么将"_“替换为”"后,两个字符串一定相等。由于’L’只能左移,‘R’只能右移,那么可以使用双指针i、j定位字符串start和target中不是’_'的位置

image.png

实现

class Solution {
    public boolean canChange(String start, String target) {
        if (!start.replaceAll("_", "").equals(target.replaceAll("_", "")))
            return false;
        for (int i = 0, j = 0; i < start.length(); i++) {
            if (start.charAt(i) == '_') continue;
            while (target.charAt(j) == '_')
                j++;
            if (i != j && (start.charAt(i) == 'L') == (i < j))
                return false;
            ++j;
        }
        return true;
    }
}
作者:灵茶山艾府
链接:https://leetcode.cn/problems/move-pieces-to-obtain-a-string/solutions/1658923/nao-jin-ji-zhuan-wan-pythonjavacgo-by-en-9sqt/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

复杂度

时间复杂度:O ( n )

空间复杂度:O ( n )

计分

  • 思路
  • start中的’L’和’R’记为1分,target中’L’和’R’记为-1分
  • 由于L和R不互穿透,即L不能移动至R的右边,R不能移动至L的左边,当出现以下情况时返回false

image.png

实现

class Solution {
    public boolean canChange(String start, String target) {
       int l = 0, r = 0;
       int n = start.length();
       for (int i = 0; i < n; i++){
           if (start.charAt(i) == 'L'){
               if (r > 0) return false;
               l++;
           }else if (start.charAt(i) == 'R'){
               if (l < 0) return false;
               r++;
           }
           if (target.charAt(i) == 'L'){
               if (r > 0) return false;
               l--;
           }else if (target.charAt(i) == 'R'){
               if (l < 0) return false;
               r--;
           }
           if (l > 0 || r < 0) return false;
       }
       return l == 0 && r == 0;
    }
}

复杂度

时间复杂度:O ( n )

空间复杂度:O ( n )

目录
相关文章
C4.
|
7月前
|
存储 程序员 C语言
C语言中如何通过指针引用字符串
C语言中如何通过指针引用字符串
C4.
85 0
|
7月前
【每日一题Day150】LC1616分割两个字符串得到回文串 | 双指针+贪心
【每日一题Day150】LC1616分割两个字符串得到回文串 | 双指针+贪心
40 0
|
7月前
【每日一题Day117】LC1234替换子串得到平衡字符串 | 双指针
【每日一题Day117】LC1234替换子串得到平衡字符串 | 双指针
51 0
|
7月前
|
算法 C语言
通过指针引用字符串
通过指针引用字符串
90 1
|
3月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
130 4
|
7月前
|
存储 C++
C++程序中的字符串与指针
C++程序中的字符串与指针
73 2
|
7月前
|
C语言
C语言指针与字符串
C语言指针与字符串
49 0
|
C语言
C语言之字符串的连接使用指针和调用函数两种方法
C语言之字符串的连接使用指针和调用函数两种方法
284 0
|
7月前
|
安全 C语言
指针与字符串:C语言中的深入探索
指针与字符串:C语言中的深入探索
136 0
|
存储 C语言
C语言之指针(指针数组以及指针的指针和字符串)
C语言之指针(指针数组以及指针的指针和字符串)
99 0