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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 418. 屏幕可显示句子的数量(DP)*

發(fā)布時(shí)間:2024/7/5 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 418. 屏幕可显示句子的数量(DP)* 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

給你一個(gè) rows x cols 的屏幕和一個(gè)用 非空 的單詞列表組成的句子,請(qǐng)你計(jì)算出給定句子可以在屏幕上完整顯示的次數(shù)。

注意:
一個(gè)單詞不能拆分成兩行。
單詞在句子中的順序必須保持不變。
在一行中 的兩個(gè)連續(xù)單詞必須用一個(gè)空格符分隔。
句子中的單詞總量不會(huì)超過(guò) 100。
每個(gè)單詞的長(zhǎng)度大于 0 且不會(huì)超過(guò) 10。
1 ≤ rows, cols ≤ 20,000.

示例 1: 輸入: rows = 2, cols = 8, 句子 sentence = ["hello", "world"] 輸出: 1 解釋: hello--- world--- 字符 '-' 表示屏幕上的一個(gè)空白位置。示例 2: 輸入: rows = 3, cols = 6, 句子 sentence = ["a", "bcd", "e"] 輸出: 2 解釋: a-bcd- e-a--- bcd-e- 字符 '-' 表示屏幕上的一個(gè)空白位置。示例 3: 輸入: rows = 4, cols = 5, 句子 sentence = ["I", "had", "apple", "pie"] 輸出: 1 解釋: I-had apple pie-I had-- 字符 '-' 表示屏幕上的一個(gè)空白位置。

來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/sentence-screen-fitting
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

2. 解題

  • 參考大佬的題解
  • 先看看1行能不能放下完整的句子
  • 然后不能放下完整句子的空位,從 i 單詞開(kāi)始放(i=0…n-1),下一行的開(kāi)頭是哪個(gè)單詞
class Solution { public:int wordsTyping(vector<string>& sentence, int rows, int cols) {int n = sentence.size(), i, j, len = 0, ans = 0;vector<int> wordlen(sentence.size());for(i = 0; i < n; ++i){len += sentence[i].size()+1;wordlen[i] = sentence[i].size();}len--;//一個(gè)句子的長(zhǎng)度if(cols >= len)//能放下完整的句子{ans += cols/(len+1)*rows;//帶一個(gè)空格能放下幾個(gè)句子cols = cols%(len+1);//只用考慮剩余的不完整空格if(cols%(len+1) == len)//不帶空格正好還有一個(gè)位置{ans += rows;return ans;}}vector<int> dp(n);//每行從i單詞開(kāi)始填,可以填到哪個(gè)單詞for(i = 0 ;i < n; i++){j = i;len = 0;while(len+wordlen[j] <= cols){len += wordlen[j]+1;//+1是空格j = (j+1)%n;}dp[i] = j;//i單詞開(kāi)始放,放完該行可以到j(luò)單詞(不含j)}for(i = 0, j = 0; i < rows; i++){if(dp[j] < j)//放滿(mǎn)了一行,dp[j]跑到 j 前面去了ans++;j = dp[j];//下一行從dp[j]單詞開(kāi)始放}return ans;} };

0 ms 7.6 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

長(zhǎng)按或掃碼關(guān)注我的公眾號(hào)(Michael阿明),一起加油、一起學(xué)習(xí)進(jìn)步!

總結(jié)

以上是生活随笔為你收集整理的LeetCode 418. 屏幕可显示句子的数量(DP)*的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。