力扣又名语文阅读理解。。。。。
看了半天才明白,题目问的是给一个字符串,反推列表数字的顺序。。。
贪心策略:
有四种字母排序的组合:
- “I D”
- “I I”
- “D I”
- “D D”
分析四种情况,发现当出现“ I ”时,对应着最小的数字;出现“ D ”时,对应着最大的数字。
但是因为最后的排序列表长度比字符串长1,所以特殊处理最后一个字母。
代码如下:
class Solution:
def diStringMatch(self, s: str) -> List[int]:
n = len(s) ## 记录字符串长度
c, d = [], [] ## 初始化两个空列表
for i in range(n+1): ## 初始化数字列表
c.append(i)
for i in range(n):
if(i==n-1 and s[i]=="D"): ## 判断最后的字符串元素
d.append(c[-1])
d.append(c[0])
elif(i==n-1 and s[i]=='I'):
d.append(c[0])
d.append(c[-1])
elif(s[i] == 'I'): ## 当前字符串为“ I ”,列表加入当前数字列表最小的元素
d.append(c[0])
del c[0] ## 删除最小元素
elif(s[i]=='D'):
d.append(c[-1])## 当前字符串为“ D ”,列表加入当前数字列表最小的元素
del c[-1] ## 删除最大元素
return d
执行通过: