【題目描述】
給定只含 "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]
思路:
題意意思是 給你一個(gè)只包含I和D的字符串本讥,然后返回同時(shí)滿足一下條件的數(shù)組
如果 S[i] == "I",那么 A[i] < A[i+1]
如果 S[i] == "D"鲁冯,那么 A[i] > A[i+1]
- 當(dāng)字符為 I 時(shí)拷沸,返回所對應(yīng)的數(shù)字是遞增的;
- 當(dāng)字符為 D 時(shí)薯演,返回所對應(yīng)的數(shù)字是遞減的撞芍;
- 返回的數(shù)字區(qū)間是 0-S.length
- 所以定義兩個(gè)變量min(對應(yīng)I) 和 max(對應(yīng)D),min從0開始 來記錄 I 所對應(yīng)的數(shù)字跨扮,每碰到一個(gè) I 序无,min++验毡,max從S.length開始,每碰到一個(gè)D帝嗡,max--
- 時(shí)間復(fù)雜度為字符串的遍歷 O(n)
- 空間復(fù)雜度為O(n)
代碼實(shí)現(xiàn):
func diStringMatch(_ S: String) -> [Int] {
var result = [Int]()
var min = 0
var max = S.count
for cha in S {
if cha == "I" {
result.append(min)
min+=1
} else {
result.append(max)
max-=1
}
}
result.append(min)
return result
}