字符串循环移位的几种解

问题描述

字符串长度为n,输出循环向左移动i位之后的字符串(i<n)

例:abcdefg 循环向左移动3位之后变为 defgabc

解法1:

模拟循环移动,比较耗时

解法2:

在足够内存的情况下,先将前 i 位字符串保存在一个临时内存中,然后将后面的 (n-i)位向左移动到 i 位,然后将之前保存的 i 位字符串放到移动之后的 (n-i)位字符串后面

解法3:

内存不够或者限制内存使用时,假设字符串s,先保存s[0],然后将s[i]复制到s[0],将s[2*i]复制到s[i],以此类推,直到 r*i >= n,无法再移动,然后将s[0]复制到s[(r-1)*i]。之后开始保存s[1],按上述方法将s[1]复制到s[(r-1)*i+1],... ,最后将s[i-1]移到最末尾,结束。

解法3示例

 解法4:

将字符串分为两部分 ab,目标是将ab转变成ba,可以先将a和b分别倒置,定义r(a)为a的倒置串,r(b)为b的倒置串,那么r(r(a)r(b)) = ba,也就是我们想要的结果。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值