【刷题】颠倒字符串中的单词

本文介绍了一种颠倒字符串中单词顺序的方法,通过去除多余空格并将单词存入列表,利用翻转操作实现字符串的逆序排列。文章详细解释了如何通过两次翻转操作达到最终效果,并预留了进一步讨论栈和队列方法的空间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

给你一个字符串 s ,颠倒字符串中 单词 的顺序。

单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。

注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

采用比较传统的方法,先把多余的空格除去,然后存放在列表中,然后把整个字符串翻转,然后在对每个单词进行翻转,用join方法再转为字符串。(其实翻转字符串可以用栈,先进后出的原则,这样就能够把字符串翻转过来)

class Solution:
    def reverseWords(self, s: str) -> str:
        l=self.trim(s)
        self.reverse(l,0,len(l)-1)
        self.reverse_each_word(l)

        return ''.join(l)     #join生成字符串类型
    


    def trim(self,s):
        left,right=0,len(s)-1
        while left<=right and s[left]==' ':
            left+=1
        while left<=right and s[right]==' ':
            right-=1

        output=[]
        while left<=right:
            if s[left]!=' ':
                output.append(s[left])
            elif output[-1]!=' ':
                output.append(s[left])
            left+=1
        return output
        #翻转字符串
    def reverse(self,s: list, left: int, right: int):
        while left<right:
            s[left],s[right]=s[right],s[left]
            left+=1
            right-=1
        #翻转每个单词
    def reverse_each_word(self,s):
        start,end=0,0
        n=len(s)
        while start<n:
            while end<n and s[end]!=' ':
                end+=1
            self.reverse(s,start,end-1)
            start=end+1
            end+=1

后面在补充栈,队列的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值