557. 反转字符串中的单词 III


题目


给定一个字符串,你须要反转字符串中每个单词的字符程序,同时仍保留空格和单词的初始程序。

示例:

输出:"Let's take LeetCode contest"输入:"s'teL ekat edoCteeL tsetnoc"

提醒:

  • 在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额定的空格。

解题思路


应用辅助列表

先看题目,给定字符串,其中字符串含有空格,要求反转被空格隔开的单词,然而保留空格和单词的初始程序。

再看前面的提醒,字符串每个单词只有单个空格分隔,字符串不会有其余额定的空格。

因为只有单个空格分隔,那么这里,咱们能够思考将给定的字符串依照空格进行宰割,这里应用字符串的 split() 函数,具体的做法:

  • 依照空格对字符串进行宰割;
  • 定义辅助列表,而后将分割部分的单词进行翻转,依照程序增加到辅助列表中;
  • 最初将反转之后单词进行拼接,增加空格距离。

具体代码实现如下:

class Solution:    def reverseWords(self, s: str) -> str:        # 依照空格进行切割        s = s.split(' ')        # 而后将切割后的每局部都进行翻转        ans = []        for part in s:            part = part[::-1]            ans.append(part)        # 最初拼接        return ' '.join(ans)

后面的办法应用字符串的 split() 办法,这里再说一种在不应用宰割的办法如何实现:

  • 遍历字符串,定义变量 left, right 别离指向单词开始和结尾,定义辅助列表;
  • 挪动 right,查找空格,当遇到空格时,开始逆序将单词增加到辅助列表中;
  • 而后遇到空格,也将空格增加到辅助列表,再次挪动 right,反复后面的步骤,直至 right 达到字符串开端。

具体的代码实现如下。

class Solution:    def reverseWords(self, s: str) -> str:        ans = []        length = len(s)                right = 0        while right < length:            left = right            # 先寻得空格,而后对空格后面进行替换            while right < length and s[right] != ' ':                right += 1            # 逆序增加到辅助列表中            for i in range(right-1, left-1, -1):                ans.append(s[i])            # 遇到空格也将空格也增加到列表中,而后继续移动            while right < length and s[right] == ' ':                ans.append(' ')                right += 1                # 返回        return ''.join(ans)

欢送关注


公众号 【书所集录】