题344. 反转字符串
题意
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
eg
输入:[“h”,“e”,“l”,“l”,“o”]
输出:[“o”,“l”,“l”,“e”,“h”]
解题
本题比较简单,可以直接把数组倒序
s[:]=s[::-1]
return s
或者使用双指针法,每次用两个指针指向剩余未交换的字符串的两头,交换完后向中间靠拢。
l=len(s)
for i in range(l//2):
s[i],s[l-i-1]=s[l-i-1],s[i]
return s
题557. 反转字符串中的单词 III
题意
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
eg
输入:“Let’s take LeetCode contest”
输出:“s’teL ekat edoCteeL tsetnoc”
解题
假设字符串为“one two three”
本题比较简单,首先想到的
- 用s.split(" ")把字符串分割成一个个单词
[“one”,“two”,“three”] - 然后把每个单词反转,word=word[::-1]
[“eno”,“owt”,“eerht”] - 最后把反转后的单词再合到一起," ".join(word)
l=s.split(" ")
res=[]
for word in l:
res.append(word[::-1])
return ' '.join(res)
一行代码:
return ' '.join(word[::-1] for word in s.split(" "))
第二种思路
- 用l=s.split(" ")把字符串分割成一个个单词
[“one”,“two”,“three”] - 把整个列表反转
[“three”,“two”,“one”] - 以空格分隔,将列表合并“ ”.join(l)
“three two one” - 将整个字符串反转,输出
l=s.split(" ")
l[:]=l[::-1]
res=" ".join(l)
return res[::-1]
一行代码
return " ".join(s.split(" ")[::-1])[::-1]
第三种思路
- 先反转字符串,s=s[::-1]
[“eerht owt eno”] - 分割成一个个单词,l=s.split(’ ')
[“eerht”, “owt”, “eno”] - 翻转列表 l[:]=l[::-1]
[“eno”, “owt”, “eerht”] - 拼接输出
s=s[::-1]
l=s.split(" ")
l[:]=l[::-1]
res=" ".join(l)
return res
一行代码
return " ".join(s[::-1].split(" ")[::-1])