首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >29 DI String Match

29 DI String Match

作者头像
devi
发布2021-08-18 16:03:11
发布2021-08-18 16:03:11
7810
举报
文章被收录于专栏:搬砖记录搬砖记录

题目

Given a string S that only contains “I” (increase) or “D” (decrease), let N = S.length.

Return any permutation A of [0, 1, …, N] such that for all i = 0, …, N-1:

代码语言:javascript
复制
If S[i] == "I", then A[i] < A[i+1]
If S[i] == "D", then A[i] > A[i+1]

Example 1:

Input: “IDID” Output: [0,4,1,3,2]

Example 2:

Input: “III” Output: [0,1,2,3]

Example 3:

Input: “DDI” Output: [3,2,0,1]

Note:

代码语言:javascript
复制
1 <= S.length <= 10000
S only contains characters "I" or "D".

分析

题意:给一串字符串,只包含I和D,I表示下一个数字是升序的,D表示下一个数字是降序的。 数组长度比字符串长度多一(数组最大值=字符串长度),数组数字必须是按顺序被使用的自然数(比如字符串长度为3,则数组只能用(0,1,2,3)之中的数字)

这道题难就难在,规律难找。

算法: 每个数只能被使用一次,最小为0,最大为S.length; 如果当前为I(升),则为0++,如果当前为D(降),则为S.length–; 将最后一位置为0++之后的值

解答

代码语言:javascript
复制
class Solution {
    public int[] diStringMatch(String S) {
        int N = S.length();
        int lo = 0, hi = N;
        int[] ans = new int[N + 1];
        for (int i = 0; i < N; ++i) {
            if (S.charAt(i) == 'I')
                ans[i] = lo++;
            else
                ans[i] = hi--;
        }

        ans[N] = lo;
        return ans;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/02/21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 分析
  • 解答
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档