代码随想录刷题第八天|344.反转字符串,541.反转字符串II,54.替换数字,151.反转字符串里的单词,55.右旋转字符串

文章介绍了Python中反转字符串的不同方法,如双指针和使用栈,以及如何替换字符串中的数字、反转单词顺序和进行右旋转。还提及了数组填充问题的处理策略和利用Unicode代码点判断字符是否为数字。
摘要由CSDN通过智能技术生成

344.反转字符串

class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        #双指针
        n=len(s)
        for i in range(n//2):
            s[i],s[n-i-1]=s[n - i - 1], s[i]
class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        #使用栈
        stack=[]
        for char in s:
            stack.append(char)
        for i in range(len(s)):
            s[i]=stack.pop()

 

541.反转字符串II

class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        s=list(s)
        for i in range(0,len(s),2*k):
            if i+k<=len(s):#当长度为3,i=0,k=3
                s[i:i+k]=s[i:i+k][::-1]
                continue
            s[i:len(s)]=s[i:len(s)][::-1]
        ans=""
        for i in s:
            ans=ans+i
        return ans
对于字符串s = 'abc',如果使用s[0:999] ===> 'abc'。字符串末尾如果超过最大长度,则会返回至字符串最后一个值,这个特性可以避免一些边界条件的处理

 

54.替换数字

其实很多数组填充类的问题,其做法都是先预先给数组扩容带填充后的大小,然后在从后向前进行操作。

这么做有两个好处:

  1. 不用申请新数组。
  2. 从后向前填充元素,避免了从前向后填充元素时,每次添加元素都要将添加元素之后的所有元素向后移动的问题。

在Python中,ord()函数返回给定字符的Unicode代码点,通过比较'i'的Unicode代码点与'0'和'9'的代码点,可以检查'i'是否是一个数字。如果'i'的Unicode代码点在'0'和'9'的代码点之间,那么'i'就是一个数字。

str1=input()

ans=""
for i in str1:
    if ord("0")<=ord(i)<=ord("9"):
        ans+="number"
    else:
        ans+=i
print(ans)

151.反转字符串里的单词

想一下,我们将整个字符串都反转过来,那么单词的顺序指定是倒序了,只不过单词本身也倒序了,那么再把单词反转一下,单词不就正过来了。

class Solution:
    def reverseWords(self, s: str) -> str:
        # 删除前后空白,但没有删除中间的空白
        s = s.strip()
        # 反转整个字符串
        s = s[::-1]
        # 将字符串拆分为单词,并反转每个单词
        s = ' '.join(word[::-1] for word in s.split())
        return s

双指针移除空格,类似双指针移除元素,空间复杂O(1) 

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)#内部要有空格

55.右旋转字符串

可直接用索引搞定,其余请见链接

其实,思路就是 通过 整体倒叙,把两段子串顺序颠倒,两个段子串里的的字符在倒叙一把,负负得正,这样就不影响子串里面字符的顺序了。

n=int(input())
str_1=input()
print(str_1[len(str_1)-n:]+str_1[:len(str_1)-n])

代码随想录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值