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数组的对应位置。