• 【CSDN Daily Practice】【贪心】文本左右对齐


    【CSDN Daily Practice】【贪心】文本左右对齐

    • 思路 :贪心,从左往右找到拼接长度 最接近maxWidth的N个单词,然后做空白格填充,迭代收集所有组,返回结果
    • Java实现
    class Solution {
    	public List<String> fullJustify(String[] words, int maxWidth) {
    		List<String> ret = new ArrayList<>();
    		int index = 0;
    		while (index < words.length) {
    			int cur = index, len = 0;
    			while (cur < words.length && len + words[cur].length() + cur - index <= maxWidth) {
    				len = len + words[cur++].length();
    			}
    			cur--;
    			StringBuilder sb = new StringBuilder();
                // 处理最后一组
    			if (cur == words.length - 1) {
    				for (int i = index; i <= cur; i++) {
    					sb.append(words[i]);
    					if (i < cur) {
    						sb.append(' ');
    					}
    				}
    			} else {
                    // 计算每个单词的最大空白格
    				int base = cur > index ? (maxWidth - len) / (cur - index) : (maxWidth - len);
    				String baseStr = genSpace(base);
                    // 计算每个单词的剩余空白格
    				int left = cur > index ? (maxWidth - len) % (cur - index) : 0;
    				String leftStr = genSpace(base + 1);
    				for (int i = index; i <= cur; i++) {
    					sb.append(words[i]);
                        if (i < cur) {
                            sb.append(left > 0 ? leftStr : baseStr);
                            left--;
                        }
    				}
    			}
    			if (sb.length() < maxWidth) {
    				sb.append(genSpace(maxWidth - sb.length()));
    			}
    			ret.add(sb.toString());
    			index = cur + 1;
    		}
    		return ret;
    	}
    	private String genSpace(int n) {
    		char[] cs = new char[n];
    		Arrays.fill(cs, ' ');
    		return new String(cs);
    	}
    }
    
    • 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
  • 相关阅读:
    [QT]day1
    Iframe通信
    Banana Pi BPI-M6(Raspberry Pi 5 替代品)初始设置及固件烧录
    Docker安装
    Vue Chrome浏览器手动调节模拟网速
    NETPLIER : 一款基于概率的网络协议逆向工具(一)理论
    2022牛客多校1
    Redis简介
    计算机毕业设计ssm水果库存管理系统30q2h系统+程序+源码+lw+远程部署
    Spring基础3——AOP,事务管理
  • 原文地址:https://blog.csdn.net/avenccssddnn/article/details/134083029