LeeCode 942 增减字符串匹配
LeeCode 942
题目描述:
由范围 [0,n] 内所有整数组成的
n+1个整数的排列序列可以表示为长度为 n 的字符串 s ,其中:
- 如果 perm[i] < perm[i + 1] ,那么 s[i] == 'I'
- 如果 perm[i] > perm[i + 1] ,那么 s[i] == 'D'
给定一个字符串 s ,重构排列
perm并返回它。如果有多个有效排列perm,则返回其中任何一个。
标签: 贪心选择、排序
建立模型
解法一
直观看这个题想到的就是两层排序的思路,遍历比较相邻位置的大小关系是否匹配字符串s,如果匹配则继续比较下一对;如果不匹配,则交换相邻两个数的位置,并向前比较和交换直到匹配或者越界。这种解法虽然思路非常清晰,但时间复杂度过高,效率较低。
时间复杂度:最坏情况可达\(O(N^2)\)
解法二
贪心选择的思路,如果当前字母s[i] == 'I', 则 res[i] = low 取可使用的最小值;如果当前字母s[i] == 'D', 则 res[i] = high 取可使用的最大值
时间复杂度:O(N)
编码实现
# 解法一编码实现
def diStringMatch(s: str) -> List[int]:
res = [i for i in range(len(s) + 1)]
left, right = 0, 1
while right < len(res):
i, j = left, right
while i >=0 and ((s[i] == 'I' and res[i] > res[j]) or (s[i] == 'D' and res[i] < res[j])):
res[i], res[j] = res[j], res[i]
i -= 1
j -= 1
left += 1
right += 1
return res
# 解法二编码实现
def diStringMatch(s: str) -> List[int]:
low, high = 0, len(s)
res = [0 for i in range(len(s) + 1)]
for i, c in enumerate(s):
if c == 'I':
res[i] = low
low -= 1
else:
res[i] = high
high -= 1
res[len(s)] = low # 移动到最后一个元素时 low = high
return res
LeeCode 942 增减字符串匹配的更多相关文章
- LeetCode 942. 增减字符串匹配(DI String Match) 49
942. 增减字符串匹配 942. DI String Match 题目描述 每日一算法2019/6/21Day 49LeetCode942. DI String Match Java 实现 and ...
- [Swift]LeetCode942. 增减字符串匹配 | DI String Match
Given a string S that only contains "I" (increase) or "D" (decrease), let N = S. ...
- Q942 增减字符串匹配
给定只含 "I"(增大)或 "D"(减小)的字符串 S ,令 N = S.length. 返回 [0, 1, ..., N] 的任意排列 A 使得对于所有 i ...
- PHP算法之增减字符串匹配
给定只含 "I"(增大)或 "D"(减小)的字符串 S ,令 N = S.length. 返回 [0, 1, ..., N] 的任意排列 A 使得对于所有 i ...
- 字符串匹配的KMP算法
~~~摘录 来源:阮一峰~~~ 字符串匹配是计算机的基本任务之一. 举例来说,有一个字符串”BBC ABCDAB ABCDABCDABDE”,我想知道,里面是否包含另一个字符串”ABCDABD”? 许 ...
- {Reship}{KMP字符串匹配}
关于KMP字符串匹配的介绍和归纳,作者的思路非常清晰,推荐看一下 http://blog.csdn.net/v_july_v/article/details/7041827
- 字符串匹配(hash算法)
hash函数对大家来说不陌生吧 ? 而这次我们就用hash函数来实现字符串匹配. 首先我们会想一下二进制数. 对于任意一个二进制数,我们将它化为10进制的数的方法如下(以二进制数1101101为例): ...
- 【C++实现python字符串函数库】二:字符串匹配函数startswith与endswith
[C++实现python字符串函数库]字符串匹配函数startswith与endswith 这两个函数用于匹配字符串的开头或末尾,判断是否包含另一个字符串,它们返回bool值.startswith() ...
- sdut 2125串结构练习--字符串匹配【两种KMP算法】
串结构练习——字符串匹配 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目链接:http://acm.sdut.edu.cn/sduto ...
- C语言字符串匹配函数
C语言字符串匹配函数,保存有需要时可以用: #include <stdio.h> #include <stdlib.h> #include <string.h> # ...
随机推荐
- Ajax属性
如何创建一个 Ajax <script> window.onload=function(){ 1)创建一个异步调用对象 va ...
- centos mail 发邮件
1.安装mailx yum -y install mailx 2. /etc/mail.rc 最后增加邮件配置如 set smtp=smtp.qq.comset smtp-auth=loginset ...
- Linux(CentOS)安装脚本
此文以CentOS为例,乌班图的是有区别的,请参照https://www.cnblogs.com/takako_mu/p/11725733.html. 安装.Net Core (能访问外网的情况下采用 ...
- 【技术指北】通过SMB协议在iOS和Windows之间传输文件
windows操作 新建文件夹 设置文件夹的属性,选择共享 设置高级共享,权限选择完全控制 选择共享,选择Everyone cmd - ipcofig,获取ipv4地址 iOS操作 打开文件管理器 选 ...
- 2019年居然还出版了一本ASP学习的书籍
ASP+Dreamweaver动态网站开发(第2版)孙更新,宾晟,李晓娜 著 内容简介 <ASP+Dreamweaver动态网站开发(第2版)>详细介绍了ASP的脚本语言基础.ASP的相关 ...
- sql 查询大数据 常用 50列优化
大数据量的问题是很多面试笔试中经常出现的问题,比如baidu google 腾讯 这样的一些涉及到海量数据的公司经常会问到. 下面的方法是我对海量数据的处理方法进行了一个一般性的总结,当然这些方法可能 ...
- 快速部署LAMP黄金架构,搭建disuz论坛
快速部署LAMP架构 [root@zhanghuan ~]# iptables -F[root@zhanghuan ~]# systemctl stop firewalld[root@zhanghua ...
- Docker下部署LNMP黄金架构
一.部署lnmp 1.网络规划 172.16.10.0/24nginx:172.16.10.10mysql:172.16.10.20php:172.16.10.30网站访问主目录:/wwwrootng ...
- SQL统计(一)
参考博客: https://blog.csdn.net/GuTiDong/article/details/81326787 按月份统计每个月的订单总金额 https://blog.csdn.net/h ...
- 火山引擎 DataLeap:一家企业,数据体系要怎么搭建?
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 导读:经过十多年的发展,数据治理在传统行业以及新兴互联网公司都已经产生落地实践.字节跳动也在探索一种分布式的数据治 ...