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          
    
  • 相关阅读:
    c++ new 堆 栈
    c++ int 负数 补码 隐式类型转换
    python json 序列化
    %pylab ipython 中文
    matplotlib中什么是后端
    IPython 4.0发布:Jupyter和IPython分离后的首个版本
    ipython
    python 类
    python 高级特性
    windows网络模型
  • 原文地址:https://www.cnblogs.com/itboy-newking/p/10896592.html
Copyright © 2011-2022 走看看