简单7:字符串变形

题目描述

对于一个长度为 n 字符串,我们需要对它做一些变形。
首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把这个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。
比如"Hello World"变形后就变成了"wORLD hELLO"。

输入描述:

给定一个字符串s以及它的长度n(1 ≤ n ≤ 10^6)

返回值描述:

请返回变形后的字符串。题目保证给定的字符串均由大小写字母和空格构成。

示例1

输入:
"This is a sample",16
返回值:
"SAMPLE A IS tHIS"

示例2

输入:
"nowcoder",8
返回值:
"NOWCODER"

示例3

输入:
"iOS",3
返回值:
"Ios"
 
思路一:

将单词位置的反转,那肯定前后都是逆序,不如我们先将整个字符串反转,这样是不是单词的位置也就随之反转了。但是单词里面的成分也反转了啊,既然如此我们再将单词里面的部分反转过来就行。

具体做法:

  • step 1:遍历字符串,遇到小写字母,转换成大写,遇到大写字母,转换成小写,遇到空格正常不变。
  • step 2:第一次反转整个字符串,这样基本的单词逆序就有了,但是每个单词的字符也是逆的。
  • step 3:再次遍历字符串,以每个空间为界,将每个单词反转回正常。

方法一:

class Solution:

    def trans(self , s: str, n: int) -> str:

        if n==0:

            return s

        res = ""

        for i in range(n):

            #大小写转换

            if s[i] <= 'Z' and s[i] >= 'A':  

                res += chr(ord(s[i]) - ord('A') + ord('a'))

            elif s[i] >= 'a' and s[i] <= 'z':

                res += chr(ord(s[i]) - ord('a') + ord('A'))

            else :

                #空格直接复制

                res+=s[i]  

        #单词反序

        res = list(res.split(' '))

        res = res[::-1]

        return ' '.join(res)

 

方法二:

class Solution:

    def trans(self, s, n):

        l = s.split(' ')                    # 将原字符串按照空格分隔成list

        l = l[::-1]                         # 翻转list内的所有单词

        s = ""

        for letter in l:

            letter = letter.swapcase()      # 调整大小写

            s += letter                     # 重新串成一个字符串

            s += ' '

        return s[0:len(s)-1]   

 

方法三:

class Solution:

    def trans(self , s: str, n: int) -> str:

        s0=[]

        for i in s:

            if i!=' ':

                if i.islower():

                    s0.append(i.upper())

                else:

                    s0.append(i.lower())

            else:

                s0.append(' ')

        s0=''.join(s0).split(' ')

        return ' '.join(s0[::-1])

 

 

posted @ 2022-07-25 15:21  萧六弟  阅读(179)  评论(0)    收藏  举报