LeetCode刷题笔记:1592.重新排列单词之间的空格

1. 问题描述

给你一个字符串 text ,该字符串由若干被空格包围的单词组成。每个单词由一个或者多个小写英文字母组成,并且两个单词之间至少存在一个空格。题目测试用例保证 text 至少包含一个单词 。

请你重新排列空格,使每对相邻单词之间的空格数目都 相等 ,并尽可能 最大化 该数目。如果不能重新平均分配所有空格,请 将多余的空格放置在字符串末尾 ,这也意味着返回的字符串应当与原 text 字符串的长度相等。

返回 重新排列空格后的字符串 。

2. 解题思路

设置双指针,遍历字符串的每一个字符,分别指向单词的首字母和末尾字母。
统计空格数量。
分割出所有单词。

3. 代码实现

class Solution {
    
    
    public String reorderSpaces(String s) {
    
    
        int n = s.length();
        int cnt = 0;
        List<String> list = new ArrayList<>();
        for (int i = 0; i < n; ) {
    
    
            if (s.charAt(i) == ' ' && ++i >= 0 && ++cnt >= 0) continue;
            int j = i;
            while (j < n && s.charAt(j) != ' ') j++;
            list.add(s.substring(i, j));
            i = j;
        }
        StringBuilder sb = new StringBuilder();
        int m = list.size();
        int t = cnt / Math.max(m - 1, 1);
        String k = "";
        while (t-- > 0) k += " ";
        for (int i = 0; i < m; i++) {
    
    
            sb.append(list.get(i));
            if (i != m - 1) sb.append(k);
        }
        while (sb.length() != n) sb.append(" ");
        return sb.toString();
    }
}

猜你喜欢

转载自blog.csdn.net/hutianle/article/details/126750093