leetcode 942 DI String Match
1.题目描述
给定只含 "I"
(增大)或 "D"
(减小)的字符串 S
,令 N = S.length
。
返回 [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]
示例 3:
输出:“DDI”
输出:[3,2,0,1]
提示:
1 <= S.length <= 1000
S 只包含字符 “I” 或 “D”。
2.解题思路
先找到一共包含“D”
的数量,即可知道开始时的数字(因为这样每次遇到“D”
时减一正好可以使最后一个“D”
减到0),然后每遇到“I”
时增1,遇到“D”
时减一即可。
3.Python代码
class Solution:
def diStringMatch(self, S):
"""
:type S: str
:rtype: List[int]
"""
right=left=S.count("D")
res=[left]
for i in range(len(S)):
if S[i]=="D":
left-=1
res.append(left)
else:
right+=1
res.append(right)
return res