0151. 颠倒字符串中的单词

0151. 颠倒字符串中的单词 #

  • 标签:双指针、字符串
  • 难度:中等

题目大意 #

给定一个字符串 s

要求:逐个翻转字符串中所有的单词。

说明:

  • 数组字符串 s 可以再前面、后面或者单词间包含多余的空格。
  • 翻转后的单词应当只有一个空格分隔。
  • 翻转后的字符串不应该包含额外的空格。

解题思路 #

第一种思路比较简单,就是直接调用 Python 的库函数,对字符串进行切片,翻转,然后拼合成字符串。

第二种思路根据 API 的思路写出模拟代码,具体步骤如下:

  • 使用数组 words 存放单词,使用字符串变量 cur 存放当前单词。
  • 遍历字符串,对于当前字符 ch。
  • 如果遇到空格,则:
    • 如果当前单词不为空,则将当前单词存入数组 words 中,并将当前单词置为空串
  • 如果遇到字符,则:
    • 将其存入当前单词中,即 cur += ch。
  • 如果遍历完,当前单词不为空,则将当前单词存入数组 words 中。
  • 然后对数组 words 进行翻转操作,令 words[i], words[len(words) - 1 - i] 交换元素。
  • 最后将 words 中的单词连接起来,中间拼接上空格,将其作为答案返回。

代码 #

  • 思路一代码:
1
2
3
class Solution:
    def reverseWords(self, s: str) -> str:
        return " ".join(reversed(s.split()))
  • 思路二代码:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
class Solution:
    def reverseWords(self, s: str) -> str:
        words = []
        cur = ""
        for ch in s:
            if ch == ' ':
                if cur:
                    words.append(cur)
                    cur = ""
            else:
                cur += ch
        
        if cur:
            words.append(cur)
               
        for i in range(len(words) // 2):
            words[i], words[len(words) - 1 - i] = words[len(words) - 1 - i], words[i]
        
        return " ".join(words)
本站总访问量  次  |  您是本站第  位访问者