红和绿

https://www.nowcoder.com/practice/56ab932abac44c8aabf0af75f598a0b4?tpId=90&tqId=30799&tPage=2&rp=1&ru=%2Fta%2F2018test&qru=%2Fta%2F2018test%2Fquestion-ranking

用动态规划

dp保存当前位置所要涂色的最小次数

每到一个新的位置,要么给它变色,要么把它前面的所有绿色变为红色。所以每个位置都比较一次前面绿色的个数,和前一位变色的总位置之间的最小的值

import java.util.*;
public class Main {
    
    public static int RG(String str) {
        int n=str.length();
        int[] dp=new int[n];//到当前位置的最小涂色次数
        int gCount=0;
        if(str.charAt(0)=='G') gCount++;
        for(int i=1;i<n;i++)
        {
            if(str.charAt(i)=='R') {
                dp[i]=Math.min(dp[i-1]+1, gCount);
            }
            else
            {
                dp[i]=dp[i-1];
                gCount++;
            }
        }
        return dp[n-1];
    }
    public static void main(String[] args) {
              Scanner scan = new Scanner(System.in);
              String str=scan.nextLine();
              System.out.println(Main.RG(str));
    }
}

 

posted @ 2019-05-14 15:32  LeeJuly  阅读(152)  评论(0)    收藏  举报