在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]

©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页