一枚菜鸟的leetcode刷题笔记 - Day17

344 - 反转字符串

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。

示例 1:
输入:[“h”,“e”,“l”,“l”,“o”]
输出:[“o”,“l”,“l”,“e”,“h”]

class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        for i in range(0, len(s)//2):
            s[i], s[len(s)-1-i] = s[len(s)-1-i], s[i]

很简单,只要把s[i]和s[len(s)-1-i]换一下就行了。

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

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

示例:
输入:“Let’s take LeetCode contest”
输出:“s’teL ekat edoCteeL tsetnoc”

class Solution:
    def reverseWords(self, s: str) -> str:
        start, end = 0, 0
        ans = [''] * len(s)  #注意这里需要一个字符串数组
        for i in range(len(s)):
            if s[i] == " ":
                ans[i] = s[i]
                end = i-1
                while start <= end:
                    ans[start] = s[end]
                    ans[end] = s[start]
                    start += 1
                    end -= 1
                start = i+1
        #最后一个单词还没有被考虑到。要单独考虑
        end = len(s)-1
        while start <= end:
            ans[start] = s[end]
            ans[end] = s[start]
            start += 1
            end -= 1
        return ''.join(ans[:])

由于python中的字符串是不可变的,因此不能就地修改。这里采用的方法是直接构造一个字符串数组ans,再通过字符串的join方法把ans整理成输出。

具体思路也很简单:首先在字符串s里找空格,找到空格相当于找到了单词的首尾,再根据【344 - 反转字符串】的方法,设置两个指针并分别赋值给ans数组的对应位置。

你可能感兴趣的:(leetcode,python,leetcode)