题目如下:

Given a string S that only contains "I" (increase) or "D" (decrease), let N = S.length.

Return any permutation A of [0, 1, ..., N] such that for all i = 0, ..., N-1:

  • If S[i] == "I", then A[i] < A[i+1]
  • If S[i] == "D", then A[i] > A[i+1]

Example 1:

Input: "IDID"
Output: [0,4,1,3,2]

Example 2:

Input: "III"
Output: [0,1,2,3]

Example 3:

Input: "DDI"
Output: [3,2,0,1] 

Note:

  1. 1 <= S.length <= 10000
  2. S only contains characters "I" or "D".

解题思路:题目很简单,可以考虑贪心算法。本题有这么一个前提,I的位置一定可以放当前能放的元素中最小的那个,而D的位置一定能放当前能放的元素中最大的那个。所以遍历S,如果是I,放入当前的最小值,同时最小值加一;如果是D,放入当前的最大值,同时最大值减一。

代码如下:

class Solution(object):
def diStringMatch(self, S):
"""
:type S: str
:rtype: List[int]
"""
low = 0
high = len(S) res = []
for i in S:
if i == 'I':
res.append(low)
low += 1
else:
res.append(high)
high -= 1
res.append(low)
return res

最新文章

  1. keepalived+nginx高可用负载均衡环境搭建
  2. 19.创建如下三个类:(People类中的三个方法分别输出一些信息,ChinaPeople 和AmericanPeople类重写父类的三个方法)。
  3. QuickFIX/J常见问题汇总
  4. messager(消息窗口)
  5. Android layout_gravity失效的问题
  6. Android应用程序的Activity启动过程简要介绍和学习计划
  7. listview滚动到底部
  8. UML之九图概述
  9. 关于图计算和graphx的一些思考[转]
  10. 理解javascript:void(0);和href=&quot;#&quot;
  11. 流程控制------if else分支语句
  12. maven的java web项目启动找不到Spring ContextLoaderListener的解决办法
  13. python爬虫第五天
  14. 基于Java的ArrayList和LinkedList的实现与总结
  15. pwnable.tw unexploitable 分析
  16. js数组元素,获得某个元素的最大值。
  17. 原生js移除或添加样式
  18. 让终端走socks5代理
  19. 五、同一台MySQL服务器启动多个端口-为读写分离做准备
  20. Hadoop数据分析平台项目实战(基于CDH版本集群部署与安装)

热门文章

  1. Ubuntu分区小知识与分区方案
  2. python+selenium自动化框架搭建
  3. 【leetcode】878. Nth Magical Number
  4. vfs之mount()
  5. Struts2基础-3 -继承ActionSupport接口创建Action控制器+javaBean接收请求参数+ 默认Action配置处理请求错误 + 使用ActionContext访问ServletAPI
  6. Shorten IPv6 Address
  7. 15 个最佳 jQuery 翻书效果插件
  8. 1-什么是 Prometheus
  9. [CSP-S模拟测试]:Star Way To Heaven(最小生成树Prim)
  10. 【python】 读写文件