zoukankan      html  css  js  c++  java
  • 剑指 Offer 58

    • 题目描述
    输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。
    
     
    
    示例 1:
    
    输入: "the sky is blue"
    输出: "blue is sky the"
    示例 2:
    
    输入: "  hello world!  "
    输出: "world! hello"
    解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
    示例 3:
    
    输入: "a good   example"
    输出: "example good a"
    解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
    • 解法一:双指针

    初始res为一个空list,用两个指针i,j分别记录一个单词的左右边界,为了满足倒序,i和j从后往前遍历,首先需要将字符串s去除首端和尾端的空格,然后再用双指针从后往前遍历s,i是字符串的左边界,j是字符串有边界,当i遇到空格时,s[i+1:j+1],则为其中一个子字符,存入res中。接着继续往前挪动,直到不为空格,此时将j也指向i。

    时间复杂度O(N),空间复杂度O(N)

    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)
    • 解法二:python库函数

    1.删除首尾空格

    2.分割字符串

    3.反转

    时间复杂度O(N),空间复杂度O(N)

    class Solution:
        '''
        python 库函数法
        '''
        def reverseWords(self, s: str) -> str:
            s = s.strip() #删除首位空格
            s = s.split() #分割字符串,split(' ')不会将多余空格看成一个空格,而split()会将多个空格看成一个空格
            s.reverse() #反转
            return ' '.join(s)
    • 解法三:栈的思想pop

    时间复杂度O(N),空间复杂度O(N)

    class Solution:
        def reverseWords(self, s: str) -> str:
            slist = s.split(' ')
            res_string = ''
            while slist:
                astring = slist.pop()
                if astring != '':
                    res_string += astring + ' ' 
            return res_string[:-1]
  • 相关阅读:
    pytest学习(2)
    pytest学习(1)
    facets学习(1):什么是facets
    window10下部署flask系统(apache和wsgi)
    python tips:列表推导
    python的一致性(1)sorted和len
    THULAC:一个高效的中文词法分析工具包(z'z)
    EAScript 2016的新增语法(1)
    python的property的用法
    python算法:LinkedList(双向线性链表)的实现
  • 原文地址:https://www.cnblogs.com/yeshengCqupt/p/13474120.html
Copyright © 2011-2022 走看看