打卡第二十一天:左旋转字符串

该文章介绍了一种方法,通过局部和整体翻转字符串来将前n个字符移动到字符串尾部,同时保持其余字符前移,从而达到目标效果。这个解决方案的关键在于使用了三次翻转操作,且在处理过程中只使用常量级额外空间,实现了O(1)的空间复杂度。

题目描述:

在这里插入图片描述

题解:

意思就是把前面的n个字符串移到字符串的尾部,剩下的字符前移,可以再开辟一个数组进行解题,但是也可以运用先局部翻转再整体翻转的方法。

在这里插入图片描述

这样就是一个空间复杂度只有O(1)的做法。

void reverse(char* s,int head,int tail)
{
    int size=tail-head+1;
    for(int i=0;i<size/2;i++)
    {
        char temp=s[head];
        s[head]=s[tail];
        s[tail]=temp;
        head++;
        tail--;
    }
}
char* reverseLeftWords(char* s, int n)
{
    int size=strlen(s);
    reverse(s,0,n-1);
    reverse(s,n,size-1);
    reverse(s,0,size-1);
    return s;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值