文档讲解:代码随想录
视频讲解:代码随想录B站账号
状态:看了视频题解和文章解析后做出来了
344.反转字符串
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
left = 0
right = len(s) - 1
while left < right:
s[left], s[right] = s[right], s[left]
left += 1
right -= 1
思路:本题比较简单,使用双指针一个指向第一位一个指向最后一位。交换他们的值,然后分别向内缩进一位。终止条件为left < right,当列表长度为偶数时,正好可以翻转所有值,当列表长度为奇数时,正好留着中间那个值不做处理。
541. 反转字符串II
class Solution:
def reverseStr(self, s: str, k: int) -> str:
s = list(s)
for i in range(0, len(s), 2*k):
s[i:i+k] = self.reverseString(s[i:i+k], k)
return ''.join(s)
def reverseString(self, s: str, k: int) -> str:
left, right = 0, len(s) - 1
while left < right:
s[left], s[right] = s[right], s[left]
left += 1
right -= 1
return s
思路:首先把上一题的翻转字符串的逻辑包装成一个函数。遍历此题的字符串,step_size = 2*k,然后处理当前位置与当前位置+k之间的字符串即可。
剑指Offer 05.替换空格
class Solution:
def pathEncryption(self, path: str) -> str:
res = ""
for i in range(len(path)):
if path[i] == ".":
res = res + " "
else:
res = res + path[i]
return res
思路:遍历path,如果等于“.”就直接把空格加进去,其余情况把当前元素加进去。
class Solution:
def pathEncryption(self, path: str) -> str:
return path.replace(".", " ")
当然也可以直接调取replace函数。
151.翻转字符串里的单词
class Solution:
def reverseWords(self, s: str) -> str:
words = s.split()
left, right = 0, len(words) - 1
while left < right:
words[left], words[right] = words[right], words[left]
left += 1
right -= 1
return " ".join(words)
思路:python这题相对简单,因为split()直接会把多个空格当成一个tab符号,所以直接split就能分割出所有有效字符串。
然后使用双指针交换头尾的字符即可。
剑指Offer58-II.左旋转字符串
class Solution:
def dynamicPassword(self, password: str, target: int) -> str:
return password[target:] + password[:target]
思路:用string slicing。
class Solution:
def dynamicPassword(self, password: str, target: int) -> str:
result = list(password) + [' '] * target
for i in range(target):
result[i], result[len(password) + i] = result[len(password) + i], result[i]
return ''.join(result).strip()
思路:将password变成列表,在后面加上等同于target数量的空格,将前target位与后target位交换,然后返回strip后的结果。