日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

leetcode LCP 19. 秋叶收藏集(dp)

發布時間:2023/11/29 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode LCP 19. 秋叶收藏集(dp) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

小扣出去秋游,途中收集了一些紅葉和黃葉,他利用這些葉子初步整理了一份秋葉收藏集 leaves, 字符串 leaves 僅包含小寫字符 r 和 y, 其中字符 r 表示一片紅葉,字符 y 表示一片黃葉。
出于美觀整齊的考慮,小扣想要將收藏集中樹葉的排列調整成「紅、黃、紅」三部分。每部分樹葉數量可以不相等,但均需大于等于 1。每次調整操作,小扣可以將一片紅葉替換成黃葉或者將一片黃葉替換成紅葉。請問小扣最少需要多少次調整操作才能將秋葉收藏集調整完畢。

示例 1:輸入:leaves = "rrryyyrryyyrr"輸出:2解釋:調整兩次,將中間的兩片紅葉替換成黃葉,得到 "rrryyyyyyyyrr"示例 2:輸入:leaves = "ryr"輸出:0解釋:已符合要求,不需要額外操作提示:3 <= leaves.length <= 10^5 leaves 中只包含字符 'r' 和字符 'y'

代碼

class Solution {public int minimumOperations(String leaves) {int n=leaves.length();int[][] dp=new int[n][3];//int[n][3]代表3部分 紅 黃 紅 數組內數字代表需要的步數dp[0][0]=leaves.charAt(0)=='r'?0:1;dp[0][1]=dp[1][2]=dp[0][2]=Integer.MAX_VALUE;//不同顏色的葉子至少為一片for(int i=1;i<n;i++){int ir=leaves.charAt(i)=='r'?1:0;int iy=leaves.charAt(i)=='y'?1:0;dp[i][0]=dp[i-1][0]+iy;//由第一部分的轉移過來dp[i][1]= Math.min(dp[i-1][0],dp[i-1][1])+ir;//由第二部分或者第一部分轉移過來if(i>=2)dp[i][2]= Math.min(dp[i-1][1],dp[i-1][2])+iy;//由第二部分或者第三部分轉移過來}return dp[n-1][2];} }

總結

以上是生活随笔為你收集整理的leetcode LCP 19. 秋叶收藏集(dp)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。