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

在一个由 ‘L’ , ‘R’ 和 ‘X’ 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作。
一次移动操作指用一个"LX"替换一个"XL",或者用一个"XR"替换一个"RX"。现给定起始字符串start和结束字符串end,请编写代码,当且仅当存在一系列移动操作使得start可以转换成end时, 返回True。
解题思路:
‘XL’ -> ‘LX’
‘RX’ -> ‘XR’
可以连续交换,因此我们比较非’X’字符,但交换不可逆,因此有顺序前后关系
同为’L’字符,且start中’L’的索引≥end中’L’的索引,匹配继续;
同为’R’字符,start中’R’的索引≤end中’R’的索引,匹配继续;
否则匹配结束,返回False;
若两者最后同时抵达字符串末尾,返回True,若只有一端抵达末尾,说明存在字符不匹配,返回

class Solution:
    def findSubsequences(self, nums: List[int]) -> List[List[int]]:
        if len(nums)<2:
            return []
        cur = set()
        cur.add((nums[0],))
        for num in nums[1:]:
            nxt = set()
            nxt.add((num,))
            for tmp in cur:
                if tmp[-1] <= num:
                    nxt.add(tmp + (num,))
                    
            cur |= nxt
        return [sub for sub in cur if len(sub) > 1]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值