代码随想录算法训练营第八天| 344. 反转字符串,541.反转字符串II,替换空格,151. 反转字符串里的单词,左旋转字符串
344. 反转字符串
题目链接:反转字符串
内置函数
以前写的时候就是偷懒的用reverse写的。
class Solution(object):
def reverseString(self, s):
"""
:type s: List[str]
:rtype: None Do not return anything, modify s in-place instead.
"""
return s.reverse()
双指针
虽然还有能直接想到用双指针,但是提醒了是用双指针之后也知道怎么写了。
这个题的两个指针一个指向头,一个指向尾,然后互换就行了。我在while上加了等于因为自己和自己换也没什么所谓。
class Solution(object):
def reverseString(self, s):
"""
:type s: List[str]
:rtype: None Do not return anything, modify s in-place instead.
"""
left=0
right=len(s)-1
while left <= right:
a=s[left]
s[left]=s[right]
s[right]=a
left+=1
right-=1
541. 反转字符串II
题目链接:反转字符串II
也不知道用的算什么方法,就当做低配版的双指针好了。
首先先计算出整个长度里有几个
2
∗
k
2*k
2∗k,然后取模就知道剩下的那点是多少了,如果是>=k and < (2*k)
的话操作一样就直接在几个
2
∗
k
2*k
2∗k上加一了。
两根指针一根在
2
∗
k
2*k
2∗k的头,一根在
2
∗
k
2*k
2∗k的尾,反转了前k个,就去下一组
2
∗
k
2*k
2∗k。
class Solution:
def reverseStr(self, s: str, k: int) -> str:
l=int(len(s)/(2*k))
r=mod(len(s),(2*k))
if (r>=k) and (r<(2*k)):
l+=1
left = 0
right = 2*k
res = ''
for i in range(l):
a = s[left:(left+k)]
res += a[::-1]
res += s[(left+k):right]
left = right
right += 2*k
if r < k:
a = s[left:]
res += a[::-1]
return res
替换空格
题目链接:替换空格
直接用的python的特性做的
class Solution:
def replaceSpace(self, s: str) -> str:
l = s.split(' ')
a = '%20'.join(l)
return a
就像卡哥说的如果只是这样就是一道水题,还得想想别的做法。
双指针
先把s变成一个数组这样好操作
数一下有几个空格,然后把数组延长两倍的空格数,一根指针left指向字符串的末尾,一根指向数组的末尾,如果left指向的不是空格就直接填进right,如果是空格就填’%20‘进去。
(数组填字符串进去是可以res[(right-2):(right+1)] = '%20'
这样的,会一个一个填进去的。
class Solution:
def replaceSpace(self, s: str) -> str:
count = 0
for i in s:
if i ==' ':
count+=1
#s.count(' ')
if count < 1:
return s
res = list(s)
res = res + [' ']*(2*count)
left = len(s)-1
right = len(res)-1
print(res)
while left < right and (left>=0):
if res[left] != ' ':
res[right] = res[left]
left -= 1
right -= 1
elif res[left] == ' ':
res[(right-2):(right+1)] = '%20'
left -= 1
right -= 3
return ''.join(res)
151. 反转字符串里的单词
题目链接:反转字符串里的单词
这个题我是直接split了之后,找到list里不是‘’
的元素倒着放进结果数组里,在join起来就好
class Solution:
def reverseWords(self, s: str) -> str:
l = s.split(' ')
res = []
for i in range(-1,-(len(l)+1),-1):
if l[i] != '':
res.append(l[i])
return ' '.join(res)
左旋转字符串
题目链接:左旋转字符串
class Solution:
def reverseLeftWords(self, s: str, n: int) -> str:
a = s[:n]
return s[n:] + a