刷题-力扣-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;
    }
};
posted @ 2021-10-05 16:10  韩亚光  阅读(37)  评论(0编辑  收藏  举报