1. 程式人生 > 其它 >刷題-力扣-942. 增減字串匹配

刷題-力扣-942. 增減字串匹配

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"。

題目分析

  1. 根據題目描述根據字串s生成0-s.length的陣列
  2. left=0,right=s.length,標識出剩餘的數字構成的範圍
  3. 遍歷字串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;
    }
};