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]
  • 相关阅读:
    Springboot整合dubbo搭建基本的消费、提供和负载均衡
    SpringBoot与Dubbo整合的三种方式
    Dubbo整合SpringBoot
    Java 如何有效地避免OOM:善于利用软引用和弱引用
    finalize的作用
    垃圾回收
    不同JDK版本之间的intern()方法的区别-JDK6 VS JDK6+
    Java8内存模型—永久代(PermGen)和元空间(Metaspace)
    to meet you
    Atomic long 和long的区别
  • 原文地址:https://www.cnblogs.com/yeshengCqupt/p/13474120.html
Copyright © 2011-2022 走看看