zoukankan      html  css  js  c++  java
  • leecode练习--942、增减字符串匹配

    leecode练习--942、增减字符串匹配

    题目要求:

    1、给定只含 "I"(增大)或 "D"(减小)的字符串 S ,令 N = S.length

    2、返回 [0, 1, ..., N] 的任意排列 A 使得对于所有 i = 0, ..., N-1,都有:

    • 如果 S[i] == "I",那么 A[i] < A[i+1]
    • 如果 S[i] == "D",那么 A[i] > A[i+1]

    例子:

    #例子1:
    输出:"IDID"
    输出:[0,4,1,3,2]
    
    #例子2:
    输出:"III"
    输出:[0,1,2,3]
    

    解题思路:

    在这道题的排序思路中,就是逐渐缩小可选值的范围,这样才能一直有值可选

    碰到“I”就把当前最小的数放到该位置,碰到“D”就把当前最大的数放到该位置

    当把 N-1 个数字分配完成之后,i和d也就碰到一起了,此时只需要把这个数放入最后的位置即可

    代码实现:

    class Solution:
        def diStringMatch(self, S: str) -> List[int]:
            i = 0
            d = len(S)
            lis = []
            for x in S:
                if x == 'I':
                    lis.append(i)
                    i += 1
                if x == 'D':
                    lis.append(d)
                    d -= 1
            lis.append(d)
            return lis          
    
  • 相关阅读:
    设计模式 里氏替换原则
    java队列
    java 多线程
    设计模式-里氏替换原则
    设计模式-单一职责原则
    一、概念
    六、序列化和反序列化(对象流)
    七、随机访问文件流
    五、包装流
    四、字符输入输出流
  • 原文地址:https://www.cnblogs.com/itboy-newking/p/10896592.html
Copyright © 2011-2022 走看看