美文网首页
942. 增减字符串匹配

942. 增减字符串匹配

作者: hqwer | 来源:发表于2019-08-08 23:53 被阅读0次

    难度简单

    题目描述:

    给定只含"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 <= 1000
    S 只包含字符"I"或"D"。

    思路:通过观察,所有的'I'都是从左到右,依次增大,所有的'D'从右到左,依次增大,最大的位置放中间数,即可满足条件,所以一次循环即可
    代码:

    public int[] diStringMatch(String S) {
        int len = S.length();
        int[] arr = new int[len + 1];
        int j = 0, k = len;
        for(int i = 0; i < len; i++) {
            if(S.charAt(i) == 'I') arr[i] = j++;
            else arr[i] = k--;
        }
        arr[len] = k;
        return arr;
    }
    

    用时3ms,时间复杂度O(N),空间复杂度O(N)N为S的长度。
    总结:先观察特征值,想好思路然后解题。

    相关文章

      网友评论

          本文标题:942. 增减字符串匹配

          本文链接:https://www.haomeiwen.com/subject/egeqjctx.html