题目
给你一个字符串 ,请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。 中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意: 输入字符串 中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。
解题
python
# 翻转字符数组中指定区间 [start..end] 的内容
def reverse_section(array, start, end):
while start < end:
array[start], array[end] = array[end], array[start]
start += 1
end -= 1
def reverseWords(s):
cleaned_list = []
# 先清理字符串,去除多余的空格
for char in s:
if char != ' ':
cleaned_list.append(char)
elif cleaned_list and cleaned_list[-1] != ' ':
cleaned_list.append(' ')
if not cleaned_list:
return ""
# 移除末尾的空格
if cleaned_list[-1] == ' ':
cleaned_list.pop()
# 将清理后的字符列表转为字符串,并整体翻转
char_array = list(''.join(cleaned_list))
length = len(char_array)
reverse_section(char_array, 0, length - 1)
# 逐个翻转每个单词
start = 0
while start < length:
for end in range(start, length):
if end + 1 == length or char_array[end + 1] == ' ':
reverse_section(char_array, start, end)
start = end + 2
break
return ''.join(char_array)
s = "the sky is blue"
result = reverseWords(s)
print(result)
blue is sky the