打卡第八天

题目1:反转字符串中的单词

思路:1.将字符串中的多余空格清除掉,单词之间留有一个空格->2.将整个字符串进行翻转

->3.以空格为临界,设置快慢指针,将每个单词逐个进行翻转。

给你一个字符串 s ,请你反转字符串中 单词 的顺序。

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

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

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

示例 1:

输入:s = "the sky is blue"
输出:"blue is sky the"
class Solution(object):
   
        """
        :type s: str
        :rtype: str
        """
        def trim_spaces(self,s):
            #先去除开头的和结尾的空格
            left = 0
            right = len(s)-1
            while right>left and s[left]==' ':
                left+=1
            while left<right and s[right]==' ':
                right-=1
            tmp=[]
            while left<=right:
                if s[left]!=' ':
                    tmp.append(s[left])
                elif tmp[-1]!=' ':
                    #当此时当前位置时空格,但是相邻的
                    tmp.append(s[left])
                left+=1
            return tmp
        def reverse_string(self,nums,left,right):
            #将去除多余空格的字符串整一个反转过来
            while left<right:
                nums[left] ,nums[right] = nums[right],nums[left]
                left+=1
                right-=1
            return None
        def reverse_each_word(self,nums):
            #以每个单词之间的空格作为结点,对每个单词进行反转
            start = 0
            n = len(nums)
            end = 0
            while start<n:
                #这里使用快慢指针进行反转,当快指针end探寻到下一个空格时,对end,start两个指针之间的数组区域进行翻转。
                while end <n and nums[end]!=' ':
                    end+=1
                self.reverse_string(nums,start,end-1)
                start = end+1
                end+=1
            return None

        def reverseWords(self,s):
            l = self.trim_spaces(s)
            self.reverse_string(l,0,len(l)-1)
            self.reverse_each_word(l)
            return''.join(l)                                          

     题目2:右旋字符串

字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。 

例如,对于输入字符串 "abcdefg" 和整数 2,函数应该将其转换为 "fgabcde"。

输入描述

输入共包含两行,第一行为一个正整数 k,代表右旋转的位数。第二行为字符串 s,代表需要旋转的字符串。

输出描述

输出共一行,为进行了右旋转操作后的字符串。

输入示例
2
abcdefg

思路:先将整个字符串进行反转,然后在以k为界将两边字符串分别进行翻转,就能得到右旋的字符串

class Solution:
    def reverse1(self, s):
        left = 0
        right = len(s) - 1
        while left < right:
            s[left], s[right] = s[right], s[left]
            left += 1
            right -= 1
        return s

    def reverse2(self, s, k):
        left = k
        right = len(s) - 1
        while left < right:
            s[left], s[right] = s[right], s[left]
            left += 1
            right -= 1
        return s
    def reverse3(self,s,k):
        left = 0
        right = k-1
        while right>left:
            s[left], s[right] = s[right], s[left]
            left += 1
            right -= 1
        return s    
            

    def reverse(self, s, k):
        s = list(s)
        s = self.reverse1(s)
        s = self.reverse2(s, k)
        s = self.reverse3(s,k)
        print(''.join(s))

n = int(input())
s = input()
solution = Solution()
solution.reverse(s, n)



    




    

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值