翻转字符串

题目:给定一个字符类型的数组chas,请在单词间做逆序调整,只要做到单词顺序逆序即可,对空格的位置没有特别要求。例如把chas看成字符串为“I love you”,调整成“you love I”。

补充题目:给定一个字符类型的数组chas和一个整数size,请把大小为size的左半区整体移到右半区,右半区整体移到左边。例如,如果把chas看作字符串“ABCDE”,size = 3,调整成“DEABC”。

基本思路:

原问题: 首先对整个数组逆序,然后遍历数组找到每一个单词,将每个单词里的字符进行逆序即可

补充问题: 先把chas[0…size-1]部分逆序,再把chas[size…N-1]部分逆序,最后再将整体逆序即可。

 


要求:如果字符串长度为N,两道题都要求时间复杂度为O(N),额外空间复杂度为O(1)

"""原问题"""

def rotate(chas):

    if chas == None or len(chas) == 0:
        return

    reverse(chas,0,len(chas)-1)
    
    left = -1
    right = -1

    for i in range(len(chas)):

        if chas[i]!=' ':

            if i==0 or chas[i-1] == ' ':
                left = i
            else:
                left = left
            
            if i==len(chas)-1 or chas[i+1] == ' ':
                right = i
            else:
                right = right
        
        if left!=-1 and right!=-1:
            reverse(chas,left,right)
            left = -1
            right = -1


def reverse(chas,left,right):
    if chas == None or len(chas) == 0:
        return 

    while left < right:
        chas[left],chas[right]= chas[right],chas[left]
        left  += 1
        right -= 1  
"""补充问题"""

def rotate1(chas,size):

    if chas == None or len(chas) == 0:
        return 
    
    reverse(chas,0,size-1)
    reverse(chas,size,len(chas)-1)
    reverse(chas,0,len(chas)-1)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值