Leetcode 学习计划之21天算法 (四)

本文探讨了字符串反转的经典算法——标准双指针技巧,并深入解析了Python中两种高效实现方式。后续章节介绍了如何使用栈和Python切片操作,以及在反转单词问题上的多种解决方案,包括原地操作和利用split/join等技术。
摘要由CSDN通过智能技术生成

第4天 双指针

344.反转字符串

标准双指针(对撞指针),reverse操作

流氓写法:s[:] = s[::-1]

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:
            s[left],s[right] = s[right],s[left]
            left+=1
            right-=1
class Solution(object):
    def reverseString(self, s):
        """
        :type s: List[str]
        :rtype: None Do not return anything, modify s in-place instead.
        """
        s[:] = s[::-1]

557.反转字符串中的单词Ⅲ

1、新建一个字符串,遍历,遇到空格就把之前的单词逆序存入新字符串。这里可以用栈来实现。遇到空格就出栈,直接实现逆序。

2、不新建数组,原地操作,遇到空格就reverse前面的单词,但是种方法对于string为不可变类型的语言不可以,如:python、Java。

3、利用python的spilt加切片逆序加字符串join操作合并实现。

用空格拼接器字符串str = ' '.join(list)      直接拼接起字符串,没有分隔符str = ''.join(list)

spilt('  ')操作返回的就是分割后的字符串列表

class Solution(object):
    def reverseWords(self, s):
        """
        :type s: str
        :rtype: str
        """
        return " ".join(word[::-1] for word in s.split(" "))
class Solution(object):
    def reverseWords(self, s):
        """
        :type s: str
        :rtype: str
        """
        return (' '.join(s.split(' ')[::-1]))[::-1]
class Solution(object):
    def reverseWords(self, s):
        """
        :type s: str
        :rtype: str
        """
        return ' '.join(s[::-1].split(' ')[::-1])
class Solution(object):
    def reverseWords(self, s):
        """
        :type s: str
        :rtype: str
        """
        i = j = x = 0
        l = len(s)
        ans = [0]*l

        def swap(nums):
            l =0
            r=len(nums)-1
            while l<r:
                nums[l],nums[r]=nums[r],nums[l]
                l+=1
                r-=1
            return nums
     
        for x in range(l):
            ans[x] = s[x]

        while(i<l):
            if(ans[i] == ' '):
                ans[j:i] = swap(ans[j:i])
                ans[i]=' '
                j=i+1
            if(i == l-1):
                ans[j:i+1] = swap(ans[j:i+1])
            i+=1       
        return ''.join(ans)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值