刷題-力扣-942. 增減字串匹配
阿新 • • 發佈:2021-10-05
942. 增減字串匹配
題目連結
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/di-string-match
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
題目描述
給定只含"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 <= 10000
- S 只包含字元"I"或"D"。
題目分析
- 根據題目描述根據字串s生成0-s.length的陣列
- left=0,right=s.length,標識出剩餘的數字構成的範圍
- 遍歷字串s,當遇到‘I’則把left填入陣列,並且left++;否則把right填入陣列,並且right--。知道遍歷完成,此時left和right相等,再把left填入陣列
程式碼
class Solution { public: vector<int> diStringMatch(string s) { int left = 0; int right = s.length(); std::vector<int> greedy; for (char c : s) { if (c == 'I') { greedy.emplace_back(left++); } else { greedy.emplace_back(right--); } } greedy.emplace_back(left); return greedy; } };