LeetCode 五月打卡-day09

Posted 王六六的IT日常

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 五月打卡-day09相关的知识,希望对你有一定的参考价值。

942. 增减字符串匹配

参考题解:https://leetcode.cn/problems/di-string-match/solution/by-nehzil-lc77/
贪心思想:
先来了解一下「贪心算法」的问题需要满足的条件:

最优子结构:规模较大的问题的解由规模较小的子问题的解组成,规模较大的问题的解只由其中一个规模较小的子问题的解决定;
无后效性:后面阶段的求解不会修改前面阶段已经计算好的结果;
贪心选择性质:从局部最优解可以得到全局最优解。

因为 I 和 D 决定了 前后位置的大小关系,按照贪心算法的思想,每次根据 I 或 D 选取 T 中最小或最大的数字,如果已经使用过的去掉,从没用过的里面选。具体步骤如下:

用两个指针来保存当前 T 中的 最大值max 和最小值min ;
遍历字符串
如果 s[i]=‘I’,那么令 result[i] 为剩余数字中的最小数;
如果 s[i]=‘D’,那么令 result[i] 为剩余数字中的最大数。
最后一个数,填入 result[n] 中;
返回结果 result。

class Solution 
    public int[] diStringMatch(String s) 
        char[] a = s.toCharArray();
        int[] arr = new int[(s.length()+1)];
        int min = 0;
        int max = a.length;
        for(int i=0;i<s.length();i++)
            if(a[i] == 'I')
                arr[i]=min;
                min++;
            else
                arr[i]=max;
                max--;
            
        
        arr[s.length()]=max;
        return arr;

    

以上是关于LeetCode 五月打卡-day09的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 五月打卡-day01

LeetCode 五月打卡-day20

LeetCode 五月打卡-day17

LeetCode 五月打卡-day19

LeetCode 五月打卡-day07

LeetCode 五月打卡-day08