leetcode-hot100-2021-08-19

    1. 在排序数组中查找元素的第一个和最后一个位置
    1. 排序数组
    1. 反转字符串中的元音字母
    1. 反转字符串 II
34. 在排序数组中查找元素的第一个和最后一个位置

双指针

class Solution:
    def searchRange(self, nums: List[int], target: int) -> List[int]:
        if len(nums) == 0:
            return [-1,-1]
        l, r = 0, len(nums)-1
        res = []
        while l<len(nums) and nums[l]<target:
            l+=1 # 左边界
        if l<len(nums) and nums[l] == target:
            res.append(l)
        else:
            res.append(-1)
        while r>=0 and nums[r]>target:
            r-=1
        if r>=0 and nums[r] == target:
            res.append(r)
        else:
            res.append(-1)
        return res
912. 排序数组
class Solution:
    def convert(self, s: str, numRows: int) -> str:
        n = len(s)
        if n <= numRows or numRows<2:
            return s
        i = 0
        flag = -1
        res = ['' for _ in range(numRows)]
        for c in s:
            res[i]+=c
            if i == 0 or i == numRows-1:
                flag = -flag
            i += flag
        return ''.join(res)
345. 反转字符串中的元音字母
class Solution:
    def reverseVowels(self, s: str) -> str:
        list1 = ['a','e','i','o','u','A','E','I','O','U']
        l,r = 0, len(s)-1
        s = list(s)
        while l<r:
            while l<len(s) and s[l] not in list1:
                l += 1
            while r>0 and s[r] not in list1:
                r-=1
            if l<r:
                s[l],s[r] = s[r],s[l]
                l+=1 # 千万不要忘记交换之后,更改指针的位置,否则会陷入死循环
                r-=1 # 千万不要忘记交换之后,更改指针的位置,否则会陷入死循环
        return ''.join(s)
541. 反转字符串 II
class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        l, r =-1,-1
        s=list(s)
        while r<len(s):
            for i in range(k):
                l+=1
                r+=2
            if r<=len(s)-1:
                j = l-k+1
                while j<l:
                    s[j],s[l] = s[l],s[j]
                    l-=1
                    j+=1
            elif r>len(s)-1 and l>len(s)-1:
                l=l-k+1
                j = len(s)-1
                while l<j:
                    s[j],s[l] = s[l],s[j]
                    l+=1
                    j-=1
                return ''.join(s)
            elif r>len(s)-1 and l<=len(s)-1:
                j = l-k+1
                while j<l:
                    s[j],s[l] = s[l],s[j]
                    l-=1
                    j+=1
                return ''.join(s)
            l = r
            if l == len(s)-1:
                return ''.join(s)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值