彩票网站有人做吗,海口市住房和城乡建设局网站,网站改造,做的网站很卡面试经典150题 day24 题目来源我的题解方法一 模拟 题目来源
力扣每日一题#xff1b;题序#xff1a;68
我的题解
方法一 模拟 分情况讨论 是最后一行 ------------将所有字符串先组合在一起#xff0c;然后在末尾加空格是单个单词一行 ------------ 将单个字符串先组合… 面试经典150题 day24 题目来源我的题解方法一 模拟 题目来源
力扣每日一题题序68
我的题解
方法一 模拟 分情况讨论 是最后一行 ------------将所有字符串先组合在一起然后在末尾加空格是单个单词一行 ------------ 将单个字符串先组合在一起然后在末尾加空格其他情况 -------------求均分的空格数avg和均分后还剩余的空格数ex[left,leftex1)之间插入的空格数为 avg1[leftex1,right)之间插入空格数为 avg注意在两个范围之间还需要插入一个 avg的空格数 时间复杂度O(m)。其中 m 是数组 words 中所有字符串的长度之和 空间复杂度O(m) public ListString fullJustify(String[] words, int maxWidth) {ListString resnew ArrayList();int nwords.length;for(int i0;in;){int starti;int endstart1;//len记录当前行的使用字符串构成的新字符串的长度现贪心单词间只加一个空格int lenwords[start].length();while(endnlenwords[end].length()1maxWidth){lenwords[end].length()1;end;}StringBuilder sbnew StringBuilder();//最后一行if(endn){for(int jstart;jend;j){sb.append(words[j]);if(j!end-1)sb.append( );}insertSpace(sb,maxWidth-sb.length());//一行只有一个字符串}else if(start1end){sb.append(words[start]);insertSpace(sb,maxWidth-sb.length());}else{//在每两个字符之间加入1个空格后还需要添加空格的数量int submaxWidth-len;//有多少个可以插入空格的位置int numend-start-1;// 单词间实际需要插入的空格数注意这里是指右侧需要插入的空格数左侧需要比右侧多1int needsub/num1;//左侧应该有几个插入空格的地方int modsub%num;sb.append(words[start]);//先模拟左侧单词的加入for(int j0;jmod;j){insertSpace(sb,need1);sb.append(words[startj1]);}//再模拟右侧单词的加入for(int jmod;jnum;j){insertSpace(sb,need);sb.append(words[startj1]);}}res.add(sb.toString());iend;}return res;
}public void insertSpace(StringBuilder sb,int count){for(int i0;icount;i){sb.append( );}
}有任何问题欢迎评论区交流欢迎评论区提供其它解题思路代码也可以点个赞支持一下作者哈~