1592 重新排列單詞間的空格(模擬)

2021-10-09 23:41:03 字數 1964 閱讀 7781

1. 問題描述:

給你乙個字串 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"

2. 思路分析:

分析題目可以知道我們需要統計出句子中的空格數目,然後將其平均分配到每個單詞中的間隔即可,python中多個字元的拼接可以使用: c * n(c表示具體的字元,n表示字元的數目),使用join方法返回列表中的元素以某個字串進行分割後的字串,strip去除字串中的前後空格

3. **如下:

class solution:

def reorderspaces(self, text: str) -> str:

# n統計所有的空格數目 s記錄單詞

i, s, n = 0, list(), 0

while i < len(text):

while i < len(text) and text[i] == " ":

n += 1

i += 1

t = ""

while i < len(text) and text[i] != " ":

t += text[i]

i += 1

if len(s) == 1: return text.strip() + " " * n

spaces = " " * (n // (len(s) - 1))

return spaces.join(s) + " " * (n % (len(s) - 1))

力扣題解簡潔的**:

class solution:

def reorderspaces(self, text: str) -> str:

c = text.count(" ")

li = text.strip().split()

if len(li) == 1:

return li[0] + " " * c

s, s1 = divmod(c, len(li) - 1)

return (" " * s).join(li) + " " * s1

5413 重新排列句子中的單詞

句子 是乙個用空格分隔單詞的字串。給你乙個滿足下述格式的句子 text 句子的首字母大寫 text 中的每個單詞都用單個空格分隔。請你重新排列 text 中的單詞,使所有單詞按其長度的公升序排列。如果兩個單詞的長度相同,則保留其在原句子中的相對順序。請同樣按上述格式返回新的句子。輸入 text le...

1470 重新排列陣列

1470.重新排列陣列 給你乙個陣列 nums 陣列中有 2n 個元素,按 x1,x2,xn,y1,y2,yn 的格式排列。請你將陣列按 x1,y1,x2,y2,xn,yn 格式重新排列,返回重排後的陣列。示例 1 輸入 nums 2,5,1,3,4,7 n 3 輸出 2,3,5,4,1,7 解釋 ...

937 重新排列日誌檔案

weekly contest 110的第一題 重新排列日誌檔案 你有乙個日誌陣列logs。每條日誌都是以空格分隔的字串。對於每條日誌,其第乙個字為字母數字識別符號。然後,要麼 我們將這兩種日誌分別稱為字母日誌和數字日誌。保證每個日誌在其識別符號後面至少有乙個字。將日誌重新排序,使得所有字母日誌都排在...