代码随想录算法训练营第八天|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 的对应子串。也就是说,这个字串其实是开辟了新的一个字符串数组,我只对这个新切片进行反转,而原来的字符串数组指针都没有传进去,所以不会进行翻转。

所以需要注意入参的设置。

posted @ 2024-03-05 00:19  HOJEST  阅读(7)  评论(0)    收藏  举报