给定一个字符串,逐个翻转字符串中的每个单
示例:
输入: " the sky is blue",
输出: "blue is sky the "
翻转后,空格不能减少,单词之间的空格数量不能发生变化
如果只是单纯的翻转字符串,就过于简单了,因此要求翻转每一个单词,单词还是原来的样子,但是单词所在的位置却发生了翻转,第一个单词变成了倒数第一个单词。
可以先将整个字符串都翻转,这样单词的位置完成了翻转,结果如下:
"eulb si yks eht "
但这个时候,每一个单词的顺序还是颠倒的,因此需要对每一个单词进行一次翻转。
字符串是不可变对象,不能直接在字符串上进行翻转,要借助列表(list)进行翻转,翻转后在使用join方法将列表里的元素拼成字符串
# coding=utf-8
def reverse_word(string):
# 先将整个句子翻转
word_lst = list(string)
for i in range(len(word_lst)/2):
word_lst[i], word_lst[len(word_lst)-1-i] = word_lst[len(word_lst)-1-i], word_lst[i]
print("".join(word_lst))
# 翻转里面的单词
start_index = None
end_index = None
b_word = False
for index, item in enumerate(word_lst):
if item.isalpha():
if not b_word:
start_index = index # 单词开始的位置
b_word = True
else:
if b_word:
end_index = index -1 # 单词结束的位置
b_word = False
# 已经知道单词开始和结束的位置,翻转这个单词
reverse_single_word(word_lst, start_index, end_index)
return "".join(word_lst)
def reverse_single_word(lst, start_index, end_index):
"""
将lst 中 start_index到end_index 这个区域翻转
:param lst:
:param start_index:
:param end_index:
:return:
"""
while start_index < end_index:
lst[start_index], lst[end_index] = lst[end_index], lst[start_index]
start_index += 1
end_index -= 1
if __name__ == '__main__':
print(reverse_word(" the sky is blue"))
QQ交流群: 211426309