目录
今日任务:
- 344.反转字符串
- 541.反转字符串||
- 剑指Offer 05.替换空格
- 151.翻转字符串里的单词
- 剑指Offer 58-||.左旋转字符串
344.反转字符串
题目链接:力扣-343.反转字符串
分析:
- 可以使用库函数list.reverse()(
如果题目关键的部分直接用库函数就可以解决,建议不要使用库函数。
毕竟面试官一定不是考察你对库函数的熟悉程度, 如果使用python和java 的同学更需要注意这一点,因为python、java提供的库函数十分丰富。
如果库函数仅仅是 解题过程中的一小部分,并且你已经很清楚这个库函数的内部实现原理的话,可以考虑使用库函数。
建议大家平时在leetcode上练习算法的时候本着这样的原则去练习,这样才有助于我们对算法的理解。
)- 利用双指针法,pre,beh,交换双方的元素,之后进行pre += 1, beh -= 1移动
list.reverse()
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
return s.reverse()
双指针法:
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
pre, beh = 0, len(s) - 1
while pre < beh:
s[pre], s[beh] = s[beh], s[pre]
pre += 1
beh -= 1
541. 翻转字符串||
题目链接:力扣-541.反转字符串II
分析:
定义一个ans空字符串存放结果,flag用来指定是否翻转
因为步长为k所以每次遍历得到的相邻字符串顺序都是不一样的,所以每次遍历都将flag取反
每次遍历得到的字符串记为a,经过flag操作后添加到结果上,一次遍历就可以得到结果
class Solution:
def reverseStr(self, s: str, k: int) -> str:
flag = 1
ans = ''
for i in range(0, len(s), k):
a = s[i: i + k]
flag = - flag
ans += a[::flag]
return ans
剑指Offer 05.替换空格
分析:
- 先将原来的s,根据空格进行切片,保存在s_list中
- 创建新的结果s = ‘’
- if 不为最后一段字符串, 则每加一段字符串+‘%20’
- 为最后一段字符串,直接加字符串即可
class Solution:
def replaceSpace(self, s: str) -> str:
s_list = list(map(str, s.split(' ')))
s = ''
for i in range(len(s_list)):
if i != (len(s_list) - 1):
s += (s_list[i]+'%20')
else:
s += s_list[i]
return s
join+split
class Solution:
def replaceSpace(self, s: str) -> str:
return ('%20').join(s.split(' '))
replace
class Solution:
def replaceSpace(self, s: str) -> str:
return s.replace(' ', '%20')
151.翻转字符串里的单词
题目链接:力扣-15.翻转字符串里的单词
分析:
- 先将s切片,逆转,再转化为str时加入‘ ’
注意:split()既遇到空格就省略 ,split(‘ ’)一个空格就划分(if‘ ’,划分为[' ',' '])
class Solution:
def reverseWords(self, s: str) -> str:
return ' '.join(list(s.split())[::-1])
剑指Offer58-II.左旋转字符串
题目链接:力扣-O58-II.左旋转字符串
分析:
- 将s在k处划分为s1,s2
- 最后return s2 + s1
class Solution:
def reverseLeftWords(self, s: str, n: int) -> str:
s1, s2 = s[:n], s[n:]
return s2 + s1