剑指 Offer-58.I-翻转单词顺序

原题链接:https://leetcode-cn.com/problems/fan-zhuan-dan-ci-shun-xu-lcof/solution/

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。


image.png

解题思路:

  1. 使用pythonstrip()函数去除首末的空格,split()分隔字符串为列表,再倒序后输出为字符串;
  2. 双指针,i、j均指向末位,从后向前搜索,先用指针i搜索到第一个空格,s[i+1:j+1]即最后一个单词,存入res,i指针继续前进,搜索到非空格,再将j指向i,重复以上过程,保存每一个单词。
class Solution:
    def reverseWords(self, s: str) -> str:
        return ' '.join(s.strip().split()[::-1])
class Solution:
    def reverseWords(self, s: str) -> str:
        # 双指针
        s = s.strip()
        i = j = len(s)-1
        res = []
        while i >= 0:
            while i >= 0 and s[i]!=' ': # 从后向前 搜索第一个空格
                i-=1
            res.append(s[i+1:j+1])
            while s[i]==' ':
                i-=1
            j = i
        return ' '.join(res)

你可能感兴趣的:(剑指 Offer-58.I-翻转单词顺序)