yankewei / LeetCode

LeetCode 问题的解决方法
MIT License
6 stars 0 forks source link

重新排列单词间的空格 #157

Open yankewei opened 2 years ago

yankewei commented 2 years ago

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

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

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

示例 1:

输入:text = "  this   is  a sentence "
输出:"this   is   a   sentence"
解释:总共有 9 个空格和 4 个单词。可以将 9 个空格平均分配到相邻单词之间,相邻单词间空格数为:9 / (4-1) = 3 个。

示例 2:

输入:text = " practice   makes   perfect"
输出:"practice   makes   perfect "
解释:总共有 7 个空格和 3 个单词。7 / (3-1) = 3 个空格加上 1 个多余的空格。多余的空格需要放在字符串的末尾。

示例 3:

输入:text = "hello   world"
输出:"hello   world"

示例 4:

输入:text = "  walks  udp package   into  bar a"
输出:"walks  udp  package  into  bar  a "

示例 5:

输入:text = "a"
输出:"a"

提示:

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/rearrange-spaces-between-words 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

yankewei commented 2 years ago

就是一个简单的模拟

class Solution {

    /**
     * @param String $text
     * @return String
     */
    function reorderSpaces($text) {
        $space_count = 0;
        $word_count = 0;

        $prefix = '';
        $word_array = [];
        for ($i = 0; $i < strlen($text); $i++) {
            if ($text[$i] === ' ') {
                if (isset($word)) {
                    $word_array[] = $word;
                    unset($word);
                }
                $space_count++;
            } else {
                if (!isset($word)) {
                    $word = $text[$i];
                } else {
                    $word .= $text[$i];
                }
                if ($prefix === ' ' || $prefix === '') {
                    $word_count++;
                }
            }
            $prefix = $text[$i];
        }

        if (isset($word)) {
            $word_array[] = $word;
        }

        if ($word_count === 1) {
            return $word_array[0] . ($space_count === 0 ? '' : str_pad(' ', $space_count));
        }
        $interval_sapce_count = intval($space_count/($word_count-1));
        $result = implode(str_pad(' ', $interval_sapce_count), $word_array);
        if ($space_count%($word_count-1) > 0) {
            $result .= str_pad(' ', $space_count%($word_count-1));
        }
        return $result;
    }
}