码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 力扣面试150 文本左右对齐 贪心 字符串 满注释版


    Problem: 68. 文本左右对齐
    在这里插入图片描述

    思路

    👩‍🏫 三叶题解
    在这里插入图片描述

    在这里插入图片描述

    💖 Code

    class Solution {
    public List fullJustify(String[] words, int maxWidth)
    	{
    		List ans = new ArrayList<>();// 结果
    		List list = new ArrayList<>();// 存当前行可容纳的单词
    
    		int n = words.length;
    		for (int i = 0; i < n;)
    		{
    			list.clear();// 清空上一行的单词
    			list.add(words[i]);// 题目保证每个单词的长度 <= maxWidth,所以每行肯定可以放一个单词
    			int lineLen = words[i++].length(); // 当前行的长度:单词 + 空格
    			while (i < n && lineLen + 1 + words[i].length() <= maxWidth)// 判断是否可以放多一个单词
    			{
    				lineLen += 1 + words[i].length();// 加上单词间的空格
    				list.add(words[i++]);
    			}
    //			当前行是最后一行,特殊处理为 左对齐
    			if (i == n)
    			{
    				StringBuffer sb = new StringBuffer(list.get(0));
    				for (int j = 1; j < list.size(); j++)// 两两单词间加一个空格拼接起来
    					sb.append(" ").append(list.get(j));
    				while (sb.length() < maxWidth)// 用空格补全长度
    					sb.append(" ");
    				ans.add(sb.toString());
    				break;
    			}
    
    //			当前行只有一个空格,左对齐 右边空格补全
    			int wordCnt = list.size();
    			if (wordCnt == 1)
    			{
    				String str = list.get(0);
    				while (str.length() != maxWidth)
    					str += " ";
    				ans.add(str);
    				continue;
    			}
    //			一般情况
    			// 所有单词的总长度 = 行长度 - 单词间空格数量(wordCnt - 1)*1
    			int wordWidth = lineLen - (wordCnt - 1);
    			// 当前行空格总长度 = 最大长度 - 单词长度
    			int spaceWidth = maxWidth - wordWidth;
    			// 单词间的平均空格数量(向下取整)
    			int spaceItemWidth = spaceWidth / (wordCnt - 1);
    			String spaceItem = "";
    			for (int j = 0; j < spaceItemWidth; j++)
    				spaceItem += " ";
    			StringBuilder sb = new StringBuilder();
    //			j 枚举每个单词的下标;sum 记录当前空格的总数
    			for (int j = 0, sum = 0; j < wordCnt; j++)// 遍历当前行的每一个单词
    			{
    				String word = list.get(j);
    				sb.append(word);
    				if (j == wordCnt - 1)
    					break;// 最后一个单词不要加入 空格分割
    				sb.append(spaceItem);// 处理第一个单词时就把间隙要填的空格补上了
    				sum += spaceItemWidth;
    //				剩余可填入的间隙数(两个单词间的间隙:即还剩多少个 spaceItem 要填)
    //				wordCnt-1:wordCnt 个单词有(wordCnt-1)个单词间隙 
    				int remain = wordCnt - 1 - (j + 1);// (j+1) 下标偏移
    //				剩余间隙 * 间隙长度 + 当前总空格长度  <  空格总长度
    				if (remain * spaceItemWidth + sum < spaceWidth)
    				{
    					sb.append(" ");// 当前间隙补多一个空格
    					sum++;
    				}
    			}
    			ans.add(sb.toString());
    		}
    
    		return ans;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
  • 相关阅读:
    C++:继承、继承对象模型、多继承、菱形继承 、虚继承的实现
    Redis的哨兵模式搭建
    基础在线:如何搭建docker环境完整教程和镜像设置
    使用python生成文字视频
    点击化学修饰糖TCO-PEG-alginate 反式环辛烯-聚乙二醇-海藻酸钠 (TCO-PEG-半乳糖,乳糖基,纤维二糖,葡萄糖)
    1.读dubbo spi机制源码
    WebRTC 媒体数据传输控制之平滑发送实现
    Java获取数组最大值、Java8的Arrays.sort()原理
    .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
    免费api接口:物流api,企业工商查询api,游戏api。。。
  • 原文地址:https://blog.csdn.net/lt6666678/article/details/137928770
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号