LeetCode刷题实战418:屏幕可显示句子的数量
共 1715字,需浏览 4分钟
·
2021-10-25 18:34
示例
示例 1:
输入:
rows = 2, cols = 8,
句子 sentence = ["hello", "world"]
输出:
1
解释:
hello---
world---
字符 '-' 表示屏幕上的一个空白位置。
示例 2:
输入:
rows = 3, cols = 6,
句子 sentence = ["a", "bcd", "e"]
输出:
2
解释:
a-bcd-
e-a---
bcd-e-
字符 '-' 表示屏幕上的一个空白位置。
示例 3:
输入:
rows = 4, cols = 5,
句子 sentence = ["I", "had", "apple", "pie"]
输出:
1
解释:
I-had
apple
pie-I
had--
字符 '-' 表示屏幕上的一个空白位置。
解题
class Solution {
public:
int wordsTyping(vector<string>& sentence, int rows, int cols) {
unordered_map<int,pair<int,int>> mp;//mp[j]=pair:放入pair[0]个句子、pair[1]行的最后元素的列数为j
int cur_row=0,cur_col=0,words=sentence.size(),res=0;
while(cur_row// cout< i
int i=0;
while(cur_rowand if(cur_col and cols-cur_col>=sentence[i].size()){
cur_col+=sentence[i++].size()+1;
}
else{//换行
++cur_row;
cur_col=0;
}
}
if(ireturn res;
}
++res;
if(mp.count(cur_col-1)==0){
mp[cur_col-1]={res,cur_row};
}
else{
int row_dif=cur_row-mp[cur_col-1].second;
int sen_dif=res-mp[cur_col-1].first;
int p=(rows-1-cur_row)/row_dif;
cur_row+=p*row_dif;
res+=p*sen_dif;
mp[cur_col-1]={res,cur_row};
}
}
return res;
}
};