leetcode增减字符串匹配(942)

tech2025-06-21  3

给定只含 “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]

输入:“IDID” 输出:[0,4,1,3,2]

address


from typing import List def di_string_match(S: str) -> List[int]: """ S[0] = 'I', 只要令A[0] = 0, s[0] = 'D', 只要令A[0] = N, 同理对剩下的N-1个字母,如果 S[1] == 'I',我们就令 A[1] 为剩下数中最小的 那个数;如果 S[1] == 'D',我们就令 A[1] 为剩下数中最大的那个数 很容易发现规律: 每次会把可以使用的数的集合中的最小值或最大值取出,并放到当前的位置, 可以满足条件 """ lo, hi = 0, len(S) ans = [] for x in S: if x == 'I': ans.append(lo) lo += 1 else: ans.append(hi) hi -= 1 return ans + [lo] if __name__ == '__main__': S = 'IDID' print(di_string_match(S))
最新回复(0)