代码随想录算法训练营第八天|454. 四数相加 II 541. 反转字符串II
第一题有些太简单了,很直接就写出来了。看教程是说不要依赖库函数。
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
for i in range(len(s)//2):
index1 = i
index2 = len(s) -1 -i
temp = s[index1]
s[index1] = s[index2]
s[index2] = temp
第二题有一个传参需要注意的:
def swap(s: List[str], start: int, end: int) -> None:
for i in range((end - start) // 2):
tmp = s[start + i]
s[start + i] = s[end - i - 1]
s[end - i - 1] = tmp
class Solution:
def reverseStr(self, s: str, k: int) -> str:
slist = list(s)
for i in range(len(slist)//(2*k)):
swap(slist, i * (2*k), i * (2*k) + k)
if len(slist) % (2*k) < k:
swap(slist, len(slist)//(2*k) * 2*k , len(slist))
if len(slist) % (2*k) >= k and len(slist) % (2*k) < 2*k:
swap(slist, (len(slist)//(2*k)) * 2*k ,(len(slist)//(2*k)) * 2*k + k)
return "".join(slist)
函数内对str list的修改为什么不生效?
原本写的swap函数是这样的:
def swap(s: List[str]) -> None:
for i in range(len(s) // 2):
print("swap list:", s)
tmp = s[i]
s[i] = s[len(s) - i - 1]
s[len(s) - i -1] = tmp
print("swap list:", s)
将切片进行入参,这里,传递给 swap 函数的是一个子列表的切片,而不是整个列表。因此,swap 函数只会反转这个子列表的切片,而不是原列表 slist 的对应子串。也就是说,这个字串其实是开辟了新的一个字符串数组,我只对这个新切片进行反转,而原来的字符串数组指针都没有传进去,所以不会进行翻转。
所以需要注意入参的设置。
浙公网安备 33010602011771号